jQuery对话框,单击外部时关闭
我知道我可以使用以下命令通过单击外部关闭对话框:
$('.ui-widget-overlay').click(function() { $("#dialog").dialog("close"); });
但是我如何更改它以使其适用于每个对话框,即我想说关闭任何对话框,因为我们在页面上有多个并且更容易拥有一行代码?
你可以给每个对话一个class级
然后选择它并在每个上运行并且即使它未打开它也会起作用:
$('.ui-widget-overlay').click(function() { $(".dialogs").each(function() {$(this).dialog("close");}) });
也许这有点矫枉过正,但试试吧
$('.ui-widget-overlay').live('click', function() { $(".ui-dialog").dialog("close"); } );
您只需要在页面上运行一次此代码, live
方法应该在您打开对话框时使其工作。
编辑:如果这不起作用,可能是.dialog
的错。 尝试
$('.ui-widget-overlay').live('click', function() { $(".ui-dialog").each( function() { $(this).dialog("close"); } ); } );
答案几乎可行。 除非您不能使用ui-dialog
类调用元素上的dialog('close')
。 这是原始元素周围的jquery-ui生成的内容,并且必须在调用.dialog
时使用的原始元素上调用.dialog
。 幸运的是,jquery为它们添加了一个ui-dialog-content
类。 用它来修改Guy的解决方案,你会得到:
$(document).on('click', '.ui-widget-overlay', function() { $('.ui-dialog-content').each(function() { $(this).dialog('close'); }); });
你可以在jsfiddle上亲自尝试一下。
编辑:将.click
更改为.live
因为执行此代码时ui-widget-overlay
可能还不存在。
编辑:更改为.on
而不是.live
因为它已折旧。
从我的测试来看,这很好用。
$('[data-role=dialog]').dialog( "close" );
它关闭任何对话框。