Javascript/DOM:如何从 DOM 对象中删除所有事件监听器
问题出现了:如何才能完全删除 DOM 对象中的所有事件一个对象,例如 div?特别是,该查询涉及使用 per div.addEventListener('click', eventReturner(), false); 添加的事件。
删除所有事件处理程序
如果目的是消除元素中的所有事件处理程序(无论类型如何),请考虑以下方法:
var clone = element.cloneNode(true);
此技术保留属性和子级而不影响 DOM 属性修改。
删除特定类型的匿名事件处理程序
替代方法是使用removeEventListener()方法,但在处理匿名函数时它可能不起作用。这里的关键问题是,使用匿名函数调用 addEventListener 会在每次调用该函数时分配一个唯一的侦听器。因此,尝试使用相同的函数引用删除事件处理程序没有任何效果。
要解决此限制,请考虑以下两种替代方法:
function handler() { dosomething(); } div.addEventListener('click',handler,false);
var _eventHandlers = {}; // somewhere global const addListener = (node, event, handler, capture = false) => { if (!(event in _eventHandlers)) { _eventHandlers[event] = [] } _eventHandlers[event].push({ node: node, handler: handler, capture: capture }) node.addEventListener(event, handler, capture) } ... addListener(div, 'click', eventReturner(), false)
此方法允许创建包装器存储对添加的事件侦听器的引用的函数。然后可以使用相应的removeAllListeners函数来删除这些处理程序。
以上是如何在 JavaScript 中从 DOM 对象中删除所有事件监听器:综合指南的详细内容。更多信息请关注PHP中文网其他相关文章!