jQuery Mobile: программно открывать диалог сразу после закрытия другого

В настоящее время я занимаюсь разработкой веб-сайта, который использует jQuery и jQuery Mobile. Он имеет диалог входа в систему, который содержит кнопку входа и кнопку регистрации.

<a href="" onClick="$('#LoginDialog').dialog('close'); $.mobile.changePage('#RegisterDialog', {role:'dialog', transition:'pop'});" data-role="button" data-icon="check" data-inline="true">Register</a>

Это код для кнопки регистрации. Я закрываю Login Dialog и открываю RegisterDialog сразу после "onClick", но на самом деле он закрывает LoginDialog, затем на короткое время показывает RegisterDialog и отправляет меня обратно в LoginDialog. Это работает, если я добавлю:

setTimeout(function() {$.mobile.changePage('#RegisterDialog', {role:'dialog', transition:'pop'});}, 100)

Есть ли способ решить эту проблему без этой короткой задержки? Я был бы очень признателен за любые полезные ответы, так как я довольно долго пытался найти решение этой проблемы, и я не могу придумать, как это исправить, кроме задержки между функциями закрытия и открытия...,

РЕДАКТИРОВАТЬ: причина, по которой я хочу закрыть диалоговое окно входа в систему перед открытием диалогового окна регистрации, просто потому, что я хочу, чтобы пользователь оказался на главной странице, когда он или она закрывает диалоговое окно регистрации. Поэтому открытие второго диалога в диалоге входа (что я тоже пытался сделать) не решает мою проблему...

РЕДАКТИРОВАТЬ: я нашел решение своей проблемы. Я просто удалил кнопку закрытия из диалогового окна и добавил кнопку отмены внизу, которая просто делает

$.mobile.changePage('#')

Это было действительно все, что мне было нужно... Извините за мой нубистский вопрос:)

1 ответ

Вы можете связать диалоги в JQM. И так как ты больше ничего не делаешь в своем onClick обработчики, чем просто changePage почему бы просто не сделать все это декларативно.

<div data-role="page" data-theme="a" id="home">
    <div data-role="header" data-theme="a" align="center">
        <h1>Home</h1>
    </div>
    <div data-role="content">
        <p>You need to log in first</p>
        <a href="#LoginDialog" data-rel="dialog" data-transition="pop" 
           data-role="button" data-icon="check" data-inline="true">Login in</a>
    </div>
</div>

<div data-role="page" data-theme="d" id="LoginDialog">
    <div data-role="header" data-theme="a" align="center">
        <h1>Login</h1>
    </div>
    <div data-role="content">
        <p>Provide your login information</p>
        <a href="#RegisterDialog" data-rel="dialog" data-transition="pop" 
           data-role="button" data-icon="check" data-inline="true">Register</a>
    </div>
</div>

<div data-role="page" data-theme="e" id="RegisterDialog">
    <div data-role="header" data-theme="e" align="center">
        <h1>Register</h1>
    </div>
    <div data-role="content">
        <p>Provide your registration information</p>
        <a href="#LoginDialog" data-rel="dialog" data-transition="pop" 
           data-role="button" data-icon="check" data-inline="true">Create an account and retutn to Login</a>
    </div>
</div>

Вот jsFiddle

Другие вопросы по тегам