Модальный диалог jQueryUI поверх другого модального диалога

#jquery #jquery-ui #modal-dialog

#jquery #jquery-пользовательский интерфейс #модальный диалог

Вопрос:

У меня следующий сценарий:

Кнопка открывает модальный диалог, который содержит флажок. Когда я нажимаю на этот флажок, я хочу, чтобы отображался другой модальный диалог (предупреждение), но я также хочу сохранить новое состояние флажка (либо установленный, либо снятый). Например, если флажок снят и на него нажимают, я ожидаю, что будет отображено предупреждение и флажок станет установленным.

Первая часть (открытие модального диалога поверх существующего модального диалога) работает правильно, но вторая часть — нет (флажок никогда не устанавливается). Честно говоря, во время отладки я заметил, что флажок действительно устанавливается во время обработки события, но по какой-то причине, которую я не смог определить, он возвращается в исходное состояние.

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

Вот мой код (демо:http://jsbin.com/amiyu4/2 ):

 $(document).ready(function() {
  $('#myButton').button();

  $('#myButton').click(function() {
    var $dialog = $('<div><input type="checkbox" id="myCheckbox"/> <label for="myCheckbox">Show warning</label></div>');
    $dialog.dialog({
      modal: true,
      title: 'Modal dialog',
      buttons: {
        'Ok': function() {
          $(this).dialog('close');
        }
      },
      width: 600
    });

    $dialog.find('#myCheckbox').change(function() {
      var $alert = $('<div>Warning!</div>');
      $alert.dialog({
        autoOpen: true,
        modal: true,
        title: 'Warning',
        buttons: {
          'Ok': function() {
            $(this).dialog('close');
          }
        }
      });
    });

    $dialog.dialog('open');
  });
});
  

Мои актуальные вопросы:

1) Почему флажок никогда не устанавливается?

2) Что я могу сделать, чтобы он стал проверенным и отображал предупреждение?

РЕДАКТИРОВАТЬ: я забыл упомянуть: это было протестировано в Chrome. В Firefox работает приведенный выше код. В Internet Explorer происходит сбой.

Ответ №1:

Я отвечу на ваши вопросы:

1) Почему флажок никогда не устанавливается?

С этим связана ошибка jquery-ui, которая происходит только в IE, связанная с порядком выполнения. Если вы запустите свой код в других браузерах, все будет в порядке.

2) Что я могу сделать, чтобы он стал проверенным и отображал предупреждение?

Вы должны добавить небольшую задержку при нажатии на флажок. Таким образом, у вас будет:

 $dialog.find('#myCheckbox').change(function() {
      setTimeout(function(){  //This does the trick!!
        var $alert = $('<div>Now it works!!</div>');
          $alert.dialog({
            autoOpen: true,
            modal: true,
            title: 'Warning',
            buttons: {
              'Ok': function() {
                $(this).dialog('close');
              }
            }
        });
      }, 10);
    });
  

Я протестировал его, и он работает так, как ожидалось.
Надеюсь, это поможет.
Приветствия

Комментарии:

1. Это действительно работает. Спасибо за ваш ответ! В качестве дополнительного примечания, проблема также возникает в Chrome. Моя ошибка, я забыл сказать, какой браузер я использую, а также забыл протестировать его в других браузерах.