删除元素及其子元素的所有JavaScript事件侦听器?

时间:2010-07-11 09:10:11

标签: javascript html css

是否可以删除元素及其子元素的所有事件侦听器?类似的东西:

myElem.removeEventListeners();

我需要这个,因为我有一个带有事件的复杂元素,我需要创建它的副本 - 就像一个不会对任何事件做出反应的静态图像。

2 个答案:

答案 0 :(得分:22)

如果您使用cloneNode,则不会复制事件监听器

如果你想要一个强大的解决方案,最好的办法就是给attach/detach听众写一个包装器,并自己跟踪它们。类似 Dean Edwards' addEvent

答案 1 :(得分:-8)

我不知道一个,在Google上搜索没有产生任何明显的结果。一个简单易懂的解决方案是创建一个循环每个事件并将其设置为null的函数,例如

function removeEvents(obj)
{
    obj.onblur = null;
    obj.onchange = null;
    obj.onclick = null;
    // ...
}

按以下方式调用此函数:removeEvents(myElem)。可以在http://www.elated.com/articles/events-and-event-handlers/找到完整的JavaScript事件处理程序列表。

毫无疑问,有一种更优雅的方式来编写这个功能,但我不知道是否有更优雅的方法来解决这个问题。如果有人知道,那将是可爱的。如果您通过JavaScript库(例如jQuery)绑定事件,则可能还有其他更好的选择。