首頁  >  文章  >  web前端  >  如何在 JavaScript 中從 DOM 物件中刪除所有事件監聽器:綜合指南

如何在 JavaScript 中從 DOM 物件中刪除所有事件監聽器:綜合指南

Patricia Arquette
Patricia Arquette原創
2024-10-25 02:12:30820瀏覽

How to Remove All Event Listeners from a DOM Object in JavaScript: A Comprehensive Guide

Javascript/DOM:如何從DOM 物件中刪除所有事件監聽器

問題出現了:如何才能完全刪除DOM 物件中的所有事件一個對象,例如div?特別是,查詢涉及使用 per div.addEventListener('click', eventReturner(), false); 新增的事件。

刪除所有事件處理程序

如果目的是消除元素中的所有事件處理程序(無論類型如何),請考慮以下方法:

var clone = element.cloneNode(true);

此技術保留屬性和子級而不影響DOM 屬性修改。

刪除特定類型的匿名事件處理程序

替代方法是使用removeEventListener()方法,但在處理匿名函數時它可能不起作用。這裡的關鍵問題是,使用匿名函數呼叫 addEventListener 會在每次呼叫函數時分配一個唯一的偵聽器。因此,嘗試使用相同的函數引用刪除事件處理程序沒有任何效果。

要解決此限制,請考慮以下兩種替代方法:

  1. 使用命名函數:
function handler() {
     dosomething();
 }

 div.addEventListener('click',handler,false);
  1. 建立包裝器函數:
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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn