jQuery Dialog, закрытие при нажатии на кнопку

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

$('.ui-widget-overlay').click(function() { $("#dialog").dialog("close"); }); 

Но как я могу изменить это, чтобы он работал для каждого диалогового windows, т. Е. Я хочу сказать, что закрыть любое диалоговое окно, поскольку у нас есть несколько на странице, и было бы проще иметь одну строку кода?

вы можете дать каждому диалогу class

а затем выберите его и запустите на каждом из них и создайте его, даже если его не открыть он будет работать:

 $('.ui-widget-overlay').click(function() { $(".dialogs").each(function() {$(this).dialog("close");}) }); 

Может быть, это слишком много, но попробуйте

 $('.ui-widget-overlay').live('click', function() { $(".ui-dialog").dialog("close"); } ); 

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

EDIT: Если это не работает, это может быть .dialog . Пытаться

 $('.ui-widget-overlay').live('click', function() { $(".ui-dialog").each( function() { $(this).dialog("close"); } ); } ); 

Ответы дали почти работу. Кроме того, вы не можете вызвать dialog('close') на элементах с classом ui-dialog . Это созданный jquery-ui контент вокруг вашего исходного элемента, и закрыть должен быть вызван исходный элемент, который вы использовали при вызове .dialog . К счастью, jquery добавляет к ним class ui-dialog-content . Используйте это, чтобы изменить решение Guy, и вы получите:

 $(document).on('click', '.ui-widget-overlay', function() { $('.ui-dialog-content').each(function() { $(this).dialog('close'); }); });​ 

Вы можете попробовать это для себя на jsfiddle .

EDIT: Изменен .click для .live так как ui-widget-overlay может еще не существовать при выполнении этого кода.

EDIT: изменено на .on вместо .live поскольку оно обесценивается.

Из моих тестов это работает хорошо.

 $('[data-role=dialog]').dialog( "close" ); 

Он закрывает любой диалог.