是否可以删除元素及其子元素的所有事件侦听器?类似的东西:
myElem.removeEventListeners();
我需要这个,因为我有一个带有事件的复杂元素,我需要创建它的副本 - 就像一个不会对任何事件做出反应的静态图像。
答案 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)绑定事件,则可能还有其他更好的选择。