2011-12-29 4 views
1

У меня есть следующие в JQuery мобильный:Программным закрыть несколько диалогов 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> 

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

<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 M OBILE?

jsFiddle демонстрирует вопрос:

http://jsfiddle.net/zUuSy/

+0

Проводка jsFiddle было бы здорово. –

ответ

3

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

Вот надрез с близкого метода 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/

+0

Это решило, спасибо. –

1

jQuery Mobile's docs довольно четко:

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

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

+0

Я знаю, вот почему я смущен. Я использую точные селектора, которые вы видите выше, в то время как оба диалога активны. –

+0

@TomH Я попытался воспроизвести это в jsFiddle, но форма бросила меня на цикл. Можете ли вы попробовать опубликовать его, и я попытаюсь вернуться и изменить свой ответ? –

+0

Кроме того, я знаю, что событие click запускается, потому что код, замененный комментарием «Обновить местоположение», запускается, и ошибок в консоли нет. –

Смежные вопросы