2010-08-12 173 views
7

我是一个进入jquery/javascript开发的动作开发人员。我有一个关于事件处理程序和绑定/解除绑定的问题。JQuery清理事件处理程序

举例来说,我有一个带有onerror事件处理程序的img元素的div。如果我用新的替换那个div,我是否需要删除绑定到img元素的eventhandler。由于img不再会在文档中将浏览器足够聪明地删除它,否则我会导致内存泄漏?

从动作脚本发出我通常会尝试不断删除旧的事件处理程序。那么当我为web浏览器编写javascript时,我需要这么做吗?

事件处理程序添加$('imgElement').error(errorFunction);

+0

如何添加事件处理程序? – 2010-08-12 12:36:12

回答

10

如果你结合使用jQuery的事件只是调用旧元素.remove()取代它之前,还是.empty()如果你只是想将其清除,这两种清理事件处理程序元素和它的孩子,或在t他的情况是.empty(),只是孩子。

如果您只是替换它,例如.html(content)泄漏内存,因为任何处理程序或这些元素的数据将保留在$.cache对象上。

+2

我不知道.html(内容)会泄漏内存!谢谢! – Patricia 2010-08-13 14:02:44

+0

你确定吗?查看jQuery源代码,第203行:manipulation.js:“//删除元素节点并防止内存泄漏” – Phil 2010-09-10 13:56:52

+0

@ phil-如果您查看之前的代码,您会看到有几个条件可以确定是否该代码执行:) SO聊天在第一次预览中有相同的内存泄漏问题,这是原因。 – 2010-09-10 14:07:01

0

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

我也好奇它是否是最好的做法解除绑定()事件......