2013-07-12 33 views
2

在升级到最新的jQuery库之前,我使用这段代码来关闭任何打开的对话框。现在这段代码只是抛出一个错误。如何关闭所有打开的JQuery对话框

$(".dialogs:ui-dialog").each(function() { 

      if ($(this).data('dialog').isOpen()) { 
       $(this).dialog('close'); 
      }; 
}); 

我需要做到的是,当一个jQuery对话框打开,用户点击菜单项打开另一个对话框,我需要确保新一打开之前所有其它对话框关闭。

什么是用于完成此任务的新代码?

+0

为什么你不能直接使用'$(“.dialogs”).dialog(“close”);'?如果对话框没有打开,我想关闭不会做任何事情。 –

+0

我无法想象这些代码用于工作(我不认为这就是API暴露的“isOpen”)。看起来你应该使用它的方式是:'$(“.selector”).dialog(“isOpen”)' – Ian

+0

@ClaudioRedi我同意 - 但我想知道是否仍然触发每个元素的close事件(open或者不会),这可能会影响其他东西 – Ian

回答

3

你可以简单地使用

$(".dialogs").dialog("close"); 

如果检查dialog source code你会看到,关闭一个已经关闭对话框没有任何效果,所以如果你愿意,你可以放心地使用它

close: function(event) { 
    var that = this; 

    if (!this._isOpen || this._trigger("beforeClose", event) === false) { 
     return; 
    } 
    ... 
} 

保持你的逻辑类似于你有什么原因,你可以使用这个

$(".dialogs").each(function() { 
    var $dialog = $(this); 
    if ($dialog.dialog('isOpen')) { 
     $dialog.dialog('close'); 
    }; 
}); 
+0

Ahh很好地发现已经关闭的对话是否触发了他们的'close'事件:) – Ian

+0

@Claudio Redi,非常感谢! –

+0

我得到一个错误'$(...)。对话框不是一个函数'这会关闭对话框,但留下黑暗的背景。 –

相关问题