会破坏jQuery对话框删除附加到其中元素的所有处理程序吗?

时间:2010-09-01 19:14:57

标签: javascript jquery jquery-ui memory-leaks jquery-ui-dialog

我注意到我正在构建的应用程序中存在一些内存泄漏,在玩了一段时间之后,FF将开始耗尽越来越多的内存(高达1 000 000 k)。

我做了一些研究,发现如果我做一个$(selector).html(some stuff)来替换某些内容,那么jQuery处理程序中的元素以前的内容将不会被删除并导致一些问题,我已经修复了所有这些。

我的问题是,如果我销毁一个带有$(mydialog).dialog('destroy');的对话框,那么附加到该对话框中各种元素的处理程序是否会被移除?

谢谢!

2 个答案:

答案 0 :(得分:5)

不,它们不会被删除,对话框元素本身将返回到它之前的状态,里面的元素不被触及。

清除对话框小部件本身,按钮,标题栏,关闭按钮等,但是您转换为对话框的元素不会受到影响而不会被清除。您需要.empty().remove()整个元素。

答案 1 :(得分:1)

我不确定使用提供的方法销毁对话框是否会删除任何包含的事件处理程序,但您始终可以这样做:

$(selector).empty();

而不是:

$(selector).html('blahblah'); // or .html('');

并且删除绑定到任何替换元素的任何事件处理程序,从而避免内存泄漏。