2017-11-01 2 views
0

Ich habe eine addEventListener-Pfeilfunktion, bei der auf Knopfdruck die Farbe durch Umschalten einer Klasse geändert wird. das sieht aus wie folgt:es6 addeventlistener - Eigenschaft 'classList' von undefined kann nicht gelesen werden

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

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

In meiner Konsole:

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

es interessant ist, dass dies zu einer Stand JS Umwandlungsfunktion wie unten:

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

clickButton.addEventListener("click", function() { 
    this.classList.toggle("modified"); 
}); 

funktioniert perfekt. Ich verstehe nicht, warum die Pfeilfunktion version classList undefiniert macht.

Wie funktioniert classList in ES6 Pfeilfunktionen?

+0

Warum schreibe es nicht als ' clickButton.classList.toggle' direkt, da Sie bereits den Verweis auf die Schaltfläche haben? – loganfsmyth

+0

Sie können, aber ich wollte jetzt eine Q & A posten, dass ich weiß, 'this' funktioniert anders mit Pfeilfunktionen. – kawnah

+0

Ah, ich habe nicht bemerkt, dass du deine eigene Frage beantwortet hast. Ihre Frage scheint irreführend zu sein, da Sie gefragt haben: "Wie funktioniert classList in ES6-Pfeilfunktionen?" Und die Antwort ist "genau so, wie Pfeile überall sonst funktionieren". Die Frage, die Sie beantwortet haben, lautet: "Warum funktioniert dieser Anruf in der Klassenliste nicht?" – loganfsmyth

Antwort

2

Ein Weg, um "Abhilfe" wird dies e.currentTarget statt vorgeschlagen, wie durch Ori Dori Kommentar

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

Verwendung Wie zitiert von Wesbos

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

Verwandte Themen