jQuery清理事件处理程序

9
我是一位ActionScript开发人员,正在学习jQuery/JavaScript开发。我有一个关于事件处理程序和绑定/解除绑定的问题。
举个例子,假设我有一个包含img元素和onerror事件处理程序的div。如果我用一个新的div替换它,我需要删除与img元素绑定的事件处理程序吗?因为img将不再在文档中,浏览器是否足够聪明以移除它或者会导致内存泄漏?
作为ActionScript的从业者,我通常会尝试不断地删除旧的事件处理程序。所以当编写针对Web浏览器的JavaScript时,我是否需要这样做?
事件处理程序使用代码$('imgElement')。error(errorFunction)添加。

事件处理程序是如何添加的? - Nick Craver
2个回答

11
如果您使用jQuery绑定事件,只需在替换旧元素之前对其调用.remove(),或者如果您只想清除它,则调用.empty()。这两种方法都可以清理该元素及其子元素的事件处理程序,或者在.empty()的情况下仅清理子元素。
如果您只是替换它,例如.html(content),则会出现内存泄漏,因为任何这些元素的处理程序或数据将留在$.cache对象上。

你确定吗?查看jQuery源代码,manipulation.js第203行:“//删除元素节点并防止内存泄漏” - Phil
@phil- 如果你看一下之前的代码,你会发现有几个条件来决定是否执行那段代码 :) SO Chat在第一个预览版中也有同样的内存泄漏问题,这是原因。 - Nick Craver

0

尝试使用firequery,它是一个Firefox插件,可以显示所有活动事件侦听器和jquery.data()

我也很好奇是否最佳实践是解除绑定()事件...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接