-1

我想覆蓋附加到事件偵聽器的函數,但是當事件被觸發時,仍舊調用舊函數。重寫函數表達式事件偵聽器不工作

var element; 
var newHandler =() => { 
    if((element = this.getElementsByClassName('someClass')[0]) != null){ 
    this.removeEventListener('DOMNodeInserted', handler) 
    element.insertAdjacentHTML('beforeend', "<a>Hello</a>"); 
    } 
} 

var handler =() => { 
    handler = newHandler; 
    var scriptTag = document.createElement('script'); 
    scriptTag.src = "someScript.js"; 
    document.head.appendChild(scriptTag); 
} 

document.addEventListener('DOMNodeInserted', handler); 

任何形式的幫助真的很感激。 謝謝!

+0

是什麼讓你認爲'handler = newHandler'會改變傳遞給'addEventListener'的事件偵聽器? – zzzzBov

+0

感謝您的評論。我認爲「handler = newHandler」應該完成這項工作。 –

+0

也許我不清楚,我知道你*認爲*那會起作用。我在問你爲什麼會這麼做?無論如何,它絕對不行(正如你已經看到的),你需要了解更多關於JS事件API的信息。 – zzzzBov

回答

0

找到了解決辦法

var element; 
var newHandler =() => { 
    if((element = this.getElementsByClassName('someClass')[0]) != null){ 
    document.removeEventListener('DOMNodeInserted', intermediary) 
    element.insertAdjacentHTML('beforeend', "<a>Hello</a>"); 
    } 
} 

var handler =() => { 
    handler = newHandler; 
    var scriptTag = document.createElement('script'); 
    scriptTag.src = "someScript.js"; 
    document.head.appendChild(scriptTag); 
} 

var intermediary =() => handler(); 

document.addEventListener('DOMNodeInserted', intermediary); 

我認爲這個問題是由一種一級緩存造成的。