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

K-G*_*Gun 8 javascript events dom

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

// somewhere i wrote
foo.addEventListener("click", clickHandler, false);
...
// somewhere i will write
foo.parentNode.removeChild(foo);
Run Code Online (Sandbox Code Playgroud)

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

Anu*_*ith 10

关于jQuery empty()方法文档说:

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

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

另请参阅此节点上的do-events-handlers-on-dom-node-get-deleted-with-the-node


Sam*_*son 5

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

您可以在监听之前或之后删除监听器,这没有什么区别。

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

  • 那内存泄漏呢?当节点明显被丢弃时,是否取消绑定事件是否重要? (3认同)