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中文網其他相關文章!