Javascript/DOM:如何刪除 DOM 對象的所有事件偵聽器
Javascript/DOM:如何刪除 DOM 對象的所有事件偵聽器
一、重寫
重寫 EventTarget 添加監聽事件方法 addEventListener
if (EventTarget.prototype.original_addEventListener == null) {
EventTarget.prototype.original_addEventListener = EventTarget.prototype.addEventListener;
function addEventListener_hook(typ, fn, opt) {
console.log('--- add event listener',this.nodeName,typ);
this.all_handlers = this.all_handlers || [];
this.all_handlers.push({typ,fn,opt});
this.original_addEventListener(typ, fn, opt);
}
EventTarget.prototype.addEventListener = addEventListener_hook;
}
二、代碼注入
您應該將此代碼插入到主網頁頂部附近(例如index.html)。在清理期間,您可以循環遍歷 all_handlers,并為每個處理程序調用removeEventHandler。不必擔心使用同一函數多次調用 removeEventHandler
function cleanup(elem) {
for (let t in elem) if (t.startsWith('on') && elem[t] != null) {
elem[t] = null;
console.log('cleanup removed listener from '+elem.nodeName,t);
}
for (let t of elem.all_handlers || []) {
elem.removeEventListener(t.typ, t.fn, t.opt);
console.log('cleanup removed listener from '+elem.nodeName,t.typ);
}
}
注意:對于 IE,請使用 Element 而不是 EventTarget,并將 => 更改為 function 以及其他各種內容。
三、實戰
舉一反三,該操作可移除監聽復制事件,Ctrl+C 等等事件。刪除原有事件,你可以復用現有功能按鈕添加自定義事件處理。
哇!又賺了一天人民幣

浙公網安備 33010602011771號