2017-11-01 9 views
0

私はaddEventListener arrow関数を持っています。ボタンをクリックすると、クラスを切り替えることで色が変わります。それは以下のようになります。es6 addeventlistener - 未定義の 'classList'プロパティを読み取ることができません

私のコンソールで
var clickButton = document.getElementById("clicker"); 

clickButton.addEventListener("click", =>() { 
    this.classList.toggle("modified"); 
}, false); 

var clickButton = document.getElementById("clicker"); 

clickButton.addEventListener("click", function() { 
    this.classList.toggle("modified"); 
}); 
完璧に動作します

:それは面白い

Uncaught TypeError: Cannot read property 'classList' of undefined at HTMLButtonElement.

は、以下のようなスタンドJS関数にこれを変換することです。私は矢印関数のバージョンがclassListを未定義にする理由を理解していません。

classListはどのようにES6矢印機能で動作しますか?

+0

なぜによって引用として、これはe.currentTargetを使用しての代わりに、オリドリさんのコメント

clickButton.addEventListener("click", (e) => { e.currentTarget.classList.toggle("modified"); }, false); 

などによって提案された1つの方法それを ' clickButton.classList.toggle'を直接参照してください。 – loganfsmyth

+0

できますが、私は今Q&Aを投稿したかったのですが、「this」は矢印の機能とは違って動作することが分かっています。 – kawnah

+0

ああ、私はあなた自身の質問に答えたことに気付かなかった。あなたは 'クラスリストはどのようにES6の矢印関数で動作するのですか? 'と尋ねたので、あなたの質問は誤解を招くようです。答えは「矢印が他の場所でどのように動作するかとまったく同じです。あなたが答えた質問は、 "なぜこのclassList呼び出しが動作しないのですか? – loganfsmyth

答えて

2

"回避策" Wesbos

Use currentTarget instead of target as target can change if you have nested elements like a span inside a link

関連する問題