Проблема в том, что вам нужно связать событие до того, как произойдет.В настоящее время вы звоните .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, слушающий события.