首页 > web前端 > js教程 > 正文

如何在 JavaScript 中从 DOM 对象中删除所有事件处理程序?

DDD
发布: 2024-10-25 04:59:29
原创
877 人浏览过

How to Remove All Event Handlers from a DOM Object in JavaScript?

Javascript/DOM:从 DOM 对象中消除所有事件处理程序

问题:

我们如何才能完全删除所有事件处理程序与 DOM 对象(例如 div)关联的事件?

问题阐述:

在您的情况下,您将使用带有自定义的 addEventListener 将事件添加到 div函数 eventReturner(),它返回一个包装函数。这每次都会创建唯一的事件侦听器。

解决方案:

从 DOM 对象中删除所有事件处理程序有两种主要方法:

1 。克隆元素

此方法保留属性和子元素,但不保留对 DOM 属性的任何更改。

<code class="javascript">var clone = element.cloneNode(true);</code>
登录后复制

2.删除特定事件处理程序

匿名事件处理程序:

用作事件处理程序的匿名函数会重复创建新的侦听器。 RemoveEventListener 对它们没有影响。要解决这个问题:

  • 直接使用函数处理程序而不包装它。
  • 为 addEventListener 创建一个包装函数,跟踪返回的函数并支持removeAllEvents。

示例包装器:

<code class="javascript">var _eventHandlers = {}; // Global reference

const addListener = (node, event, handler, capture = false) => {
  if (!(event in _eventHandlers)) {
    _eventHandlers[event] = [];
  }
  _eventHandlers[event].push({ node, handler, capture });
  node.addEventListener(event, handler, capture);
};

const removeAllListeners = (targetNode, event) => {
  _eventHandlers[event] = _eventHandlers[event].filter(({ node }) => node !== targetNode);
  targetNode.removeEventListener(event, handler, capture);
};</code>
登录后复制

用法:

<code class="javascript">addListener(div, 'click', eventReturner(), false);

// To remove the event listeners:
removeAllListeners(div, 'click');</code>
登录后复制

注意:如果您的代码运行较长的时间并涉及创建和删除许多元素,请确保从 _eventHandlers 中删除对这些元素的任何引用。

以上是如何在 JavaScript 中从 DOM 对象中删除所有事件处理程序?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!