2014-01-29 252 views
3

有两种方法可以打开一个jQuery对话框:最佳实践

1)设置autoOpen=true初始化时,一个对话框

2)初始化之后(与autoOpen = false)请拨打电话$("#id").dialog("open");

目前,在我的代码中,只要用户单击按钮,模态对话框就会使用第一种方法打开。在“确定”或“取消”对话框关闭$(this).dialog("close");

在每次单击对话框时使用autoOpen = true打开对话框会不好吗?换句话说,每次点击都会重新初始化对话框,这不好吗?

从性能角度来看,每次点击都会重新初始化对话框,导致对话框事件被多次注册等问题?

这是什么jQuery的最佳做法?

代码:

$("#button").on("click",function(){ 

    $("#dialogHello").dialog({ 
     modal: true, 
     autoOpen: true, 
     buttons: [ 
     { "text" : "Ok", "click" : function() { $(this).dialog("close"); } }, 
     { "text" : "Cancel", "click" : function(){ $(this).dialog("close"); } } 
     ] 
    }); 

}); 

回答

1

通过观察DOM,我注意到jquery ui对话框在DOM中注入的html元素不会重复,如果jquery ui对话框在每次调用时都重新初始化。如果jQuery UI对话框DOM元素已经存在,那么它们只是被重用。

以下主题:

jQuery draggable - what happens if it is applied twice to an element?

解释说,jQuery的事件不会在相同的元素被注册多次,如果它已经存在。例如,在我的场景中,如果我在每次调用时重新初始化jquery ui对话框,则不会有正在注册的递增事件。

0

我一般初始化我的对话一旦与的AutoOpen设置为false,然后“开放”他们时,都需要他们。如果需要,我可能会在打开之前更新对话内容。

如果出于某种原因,您确实需要每次都重新启动它,那么您至少应该首先使用'destroy'方法来避免导致问题和膨胀。

+0

但确实重新初始化真正膨胀? 我需要帮助来建立这方面的确凿证据。 – TchiYuan

+0

看起来至少在页面中增加了额外的html:http://blog.balfes.net/2013/02/14/properly-cleaning-up-a-jquery-dialog-box-to-prevent-memory-leaks /(虽然它可能在此后的一年中发生了变化) –

+0

是的,它添加了html,但它不会继续添加。如果它已经存在,它会重用它。就DOM而言,如果我每次都重新初始化jquery对话框,似乎没有任何影响。现在,我只是想知道对话事件。重新初始化被多次调用时,它们是否多次注册?它似乎并不如此,但很难说。 – TchiYuan