Как отменить открытое диалоговое окно jQuery UI? - PullRequest
3 голосов
/ 29 июня 2010

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

container.dialog().bind('dialogopen', function(event, ui)
  {
     ...
     if (someCondition)
     {
         $(this).dialog('close'); // the dialog is not closed!
     }
  }

Как мне заставить это работать?

К сожалению, нет события beforeopen, которое нужно перехватить.

Ответы [ 3 ]

4 голосов
/ 29 июня 2010

Проблема в том, что вам нужно связать событие до того, как произойдет.В настоящее время вы звоните .dialog(), который открывает диалоговое окно (если autoOpen: false не предоставлена ​​опция).Это означает, что перед выполнением .bind(....) событие уже произошло.Решение состоит в том, чтобы просто связать до события, например:

container.bind('dialogopen', function(event, ui) {
  if (someCondition) {
     $(this).dialog('close'); // the dialog is not closed!
  }
}).dialog(); //.dialog() fires "dialogopen" as part of it's execution

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

Это работает, потому что событие dialogopen запускается для элемента, который вы превратили в диалоговое окно (не контейнер диалога) ... не важно, что само диалоговое окно созданопозже это просто элемент DOM, слушающий события.

1 голос
/ 29 июня 2010

Просмотрите autoOpen (установите его на false), чтобы скрыть его, пока не подтвердите какое-либо условие.Затем позвоните .dialog("open")

0 голосов
/ 29 июня 2010

Событие открытия в диалоге похоже на beforeopen.

...