-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

コメントありがとうございます。私は "ハンドラ= 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); 

を発見しました。

関連する問題