从动态元素中删除onClick

removing onClick from dynamic elements

本文关键字:删除 onClick 元素 动态      更新时间:2023-09-26

我应该删除动态clickHandlers到动态创建的html标签,还是由垃圾收集器自动处理。

我的主要浏览器是Safari(嵌入在iOS应用程序),但我想我读到IE有内存泄漏问题。

var li = document.createElement('li');
li.addEventListener('click', function(){});

所以如果这个元素被从DOM中删除以后,我应该删除clickHandler,只是以防万一,请让我知道如何删除属性clickHandler?

li.removeEventListener("click", function_name);

这将删除事件监听器

来源:http://www.w3schools.com/jsref/met_element_removeeventlistener.asp

对于匿名函数,它们的意义在于没有引用并且缺少名称,因此对于removeEventListener(),您将需要一个命名函数。

如果在删除元素后没有对元素的引用,则GC应该清理它引用的处理程序函数。所以你不需要做任何事情。

但是如果IE有这样的错误,您可以使用removeEventListener来删除处理程序,但这要求您使用命名函数,因为您必须给removeEventListener提供与调用addEventListener时相同的函数,并且匿名函数将永远不会彼此相同。

function myClickHandler {
    ...
}
var li = document.createElement('li');
li.addEventListener('click', myClickHandler);
...
li.removeEventListener('click', myClickHandler);
myClickHandler = null;
li.parentNode.removeChild(li);

myClickHandler = null;是必需的,否则函数名将包含对处理程序函数的引用,因此它不会被GCed。

如果您有多个li,并且它们都使用相同的处理程序函数,则不应该这样做。无论您有多少个li,它们都只是指向同一个函数,因此它不会占用大量内存。