簡體   English   中英

如何在不克隆或訪問事件偵聽器創建的情況下從元素中刪除事件偵聽器?

[英]How can I remove an event listener from an element without cloning or access to the event listener creation?

我正在通過網站建設者 Kajabi 幫助某人建立網站。 一些 JavaScript 代碼默認包含在網站中,無法對其進行編輯。 我正在嘗試刪除窗口元素上的事件偵聽器,但事件偵聽器的創建發生在我無法編輯的代碼中。 這段代碼在其他任何事情之前都會觸發,所以我也無法中斷它。 在開發工具上,我追蹤了事件處理程序並發現了這一點:

(o=g.handle)||(o=g.handle=function(t){return"undefined"!=typeof Ft&&Ft.event.triggered!==t.type?Ft.event.dispatch.apply(e,arguments):void 0})

這就是我可以在事件監聽器上找到的所有信息。 我了解克隆可以刪除事件偵聽器,但是從窗口元素的子元素中刪除所有偵聽器會造成麻煩。

有小費嗎?

從您發布的小代碼中繼續進行假設。 og.handle並且這是一個內聯事件偵聽器,因此如果您可以訪問它們,您可以簡單地覆蓋它。

g.handle = false;

似乎代碼正在從Ft變量的Ft.event.dispatch.apply(e,arguments)分派一個新事件。 它與 vanilla javascript 的.dispatchEvent()有點不同,但我假設它只是它的一個實現。

如果情況並非如此,並且還有其他地方正在使用.addEventListener()添加一個事件偵聽器,但由於您沒有對該函數的引用,您無法刪除該事件偵聽器,您可以進行淺克隆並將子代附加到克隆元素。 克隆的元素將丟失任何附加到addEventListener()的事件,但它們的子元素不受影響。 您只是將原始子項附加到新的克隆元素。

let oldElement = document.getElementById("toClone");

// - Shallow clone
let clone = oldElement.cloneNode(false);

// - Adding the original children to the clone
while (oldElement.firstChild) {
    clone.appendChild(oldElement.firstChild);
}

// - Replacing them
oldElement.parentNode.appendChild(clone);
oldElement.remove();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM