8

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

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

我是否也需要删除所有事件?

4

2 回答 2

12

jQueryempty()方法的文档说:

为了避免内存泄漏,jQuery 在删除元素本身之前从子元素中删除其他构造,例如数据和事件处理程序。

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

另请参阅此do-events-handlers-on-a-dom-node-get-deleted-with-the-node

于 2012-12-26T12:31:43.460 回答
6

从 DOM 中移除元素不会(或不应该)移除它的任何监听器;毕竟,您很可能只是在重新排列 DOM 元素的过程中,因此您不想丢弃任何侦听器。

您可以在之前或之后删除侦听器,这应该没有任何区别。

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

于 2012-12-26T12:18:04.217 回答