在jQuery中,如果你删除一个元素将它的任何事件被删除?
-
20-09-2019 - |
题
例如,如果我有与结合到它下面的事件的链接:
$("a.d").bind("click", this, onDelete);
和后做的:
$("a.d").remove();
是罚款?或者它会导致内存泄漏,我需要调用解除绑定1?
感谢您的帮助。
解决方案
我没有测试,但是相信移除元素将其解除绑定的事件处理程序。我来从 jQuery的API文档其中规定,如果要移动(搜索删除)这个结论从DOM的一部分到另一部分,一个元素:
$("#foo").remove().appendTo("#bar");
应写为
$("#foo").appendTo("#bar");
,以避免丢失的事件处理程序。
其他提示
从jQuery的文档为删除()
移除来自所有匹配元素 DOM。这并不删除它们 jQuery对象,允许你使用 匹配元素进一步。注意 这个函数开始1.2.2 也将删除所有事件处理程序 并在内部缓存数据。
答案是肯定的,只要该事件被附与jquery。如果喜欢的东西附着“点击”我不相信它会的。
此文章讨论了一些。它还定义了一个递归函数删除所有点击事件的元素,所有的孩子。它将覆盖的onclick所以你覆盖定义jQuery的点击处理程序以及处理程序。
HTTP:/ /www.computerhowtoguy.com/how-to-use-the-jquery-unbind-method-on-all-child-elements/
function RecursiveUnbind($jElement) {
// remove this element's and all of its children's click events
$jElement.unbind();
$jElement.removeAttr('onclick');
$jElement.children().each(function () {
RecursiveUnbind($(this));
});
}
要使用的功能在前面的例子中,我们将调用函数传递给它的“容器” DIV作为jQuery对象。
RecursiveUnbind($('#container'));
有关的记录,你不必担心在JavaScript中的内存泄漏。 (寒意人,而不是C ++!)
浏览器的JavaScript引擎管理所有对象,垃圾收集它们。当我说的对象,这意味着事件处理函数也是如此,因为功能也是对象中的JavaScript。
相依:我爱如何一切是在JavaScript的对象:d
干杯!点击 JRH
不隶属于 StackOverflow