Программно закрывать несколько диалогов JQuery Mobile одновременно - PullRequest
1 голос
/ 30 декабря 2011

У меня в jQuery mobile есть следующее:

<script type="text/javascript">
    $("#locate_results").live("pageinit", function(event) {
        $("#venues li a").click(function(e) {
            e.preventDefault();
            // Update location
            $(".ui-dialog").each(function() { $(this).dialog("close"); });
        });
    });
</script>

<div data-role="page">
    <div data-role="header">My Form</div>
    <div data-role="content">
        ... other content ...
        <a href="#locator" data-rel="dialog">Choose a Location</a>
    </div>
</div>
<div data-role="dialog" id="locator">
    <div data-role="header">Search for a Location</div>
    <div data-role="content">
        <form action="/locate" method="post" data-rel="dialog">
            <input type="text" name="query" />
            <input type="submit" value="Search" />
        </form>
    </div>
</div>

Вывод / locate выглядит следующим образом:

<div id="locate_results" data-role="dialog">
    <div data-role="header">Search Results</div>
    <div data-role="content">
        <ul id="venues" data-role="listview">
            <li><a href="#">Venue 1 Name</a></li>
            ... more results ...
        </ul>
    </div>
</div>

По сути,

  1. Пользователь нажимает ссылку «Добавить местоположение».
  2. Форма поиска местоположения загружается в диалоге
  3. Результаты поиска загружаются во втором диалоговом окне
  4. Пользователь нажимает результат поиска в окневторой диалог.

Шаг 5 должен закрывать оба диалога, возвращая пользователя к исходному содержимому страницы.Однако закрывается только самый верхний диалог (#locate_results).Я также попробовал следующее и получил тот же результат:

$("#locate_results").dialog("close");
$("#locator").dialog("close");

и

$(".ui-dialog").dialog("close");

Я пытался следовать этим ответам, но без удачи:

Как правильно закрыть все открытые диалоги в jQuery Mobile?

jsFiddle, демонстрируя проблему:

http://jsfiddle.net/zUuSy/

Ответы [ 2 ]

3 голосов
/ 30 декабря 2011

Кажется, это ошибка.

Вот отрывок из метода закрытия jQuery Mobile:

// Close method goes back in history
close: function() {
    window.history.back();
}

В некоторых браузерах возникают проблемы с многократным вызовом window.history.back()последовательность, поэтому вызов $(".ui-dialog").dialog("close") возвращается в историю только один раз.Однако вызов window.history.go(-2), кажется, работает.

Взгляните: http://jsfiddle.net/rummik/zUuSy/4/

1 голос
/ 30 декабря 2011

Документы jQuery Mobile довольно явные:

Вы также можете вызвать метод диалога close() для программного закрытия диалогов, например: $('.ui-dialog').dialog('close').

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...