我应该在removeChild之前从元素中删除事件处理程序吗?

时间:2012-12-26 12:10:08

标签: javascript events dom

说,我有一个元素<img id="foo" />并附加了一些事件,例如click(不是内联onclick!)。

// somewhere i wrote
foo.addEventListener("click", clickHandler, false);
...
// somewhere i will write
foo.parentNode.removeChild(foo);

我是否也需要删除所有活动?

2 个答案:

答案 0 :(得分:8)

documentation on jQuery's empty() method说:

  

为了避免内存泄漏,jQuery会删除   其他结构,如数据和   来自子元素的事件处理程序   在删除元素之前   自己。

所以:1)如果我们没有明确删除事件处理程序,我们会发生内存泄漏,2)通过使用empty(),我们可以避免这种内存泄漏。

另见do-events-handlers-on-a-dom-node-get-deleted-with-the-node

答案 1 :(得分:5)

从DOM中删除元素不会(或不应该)删除任何侦听器;毕竟,你很可能只是在重新安排你的DOM元素,因此你不想丢弃任何听众。

您可以在之前或之后删除侦听器,它不会有任何区别。

如果您的计划是删除元素,并且不再使用它们,那么继续删除事件以避免任何内存泄漏的可能性是明智的。