⊗jsPmOENEH 430 of 505 menu

Event-Handler für neue Elemente in JavaScript hinzufügen

Nehmen wir an, wir haben eine Liste ul und einen Button:

<ul> <li>item</li> <li>item</li> <li>item</li> <li>item</li> <li>item</li> </ul> <button>add</button>

Wir holen unsere Elemente in die entsprechenden Variablen:

let button = document.querySelector('button'); let list = document.querySelector('ul'); let items = list.querySelectorAll('li');

Sorgen wir dafür, dass bei einem Klick auf ein beliebiges li ein Ausrufezeichen an dessen Ende angehängt wird:

for (let item of items) { item.addEventListener('click', function() { this.textContent = this.textContent + '!'; }); }

Lassen wir uns nun bei einem Klick auf den Button ein neues li am Ende der Liste hinzufügen:

button.addEventListener('click', function() { let item = document.createElement('li'); item.textContent = 'item'; list.appendChild(item); });

Wir werden jedoch ein Problem feststellen: Ein Klick auf das neu hinzugefügte li führt nicht zum Anhängen eines Ausrufezeichens ans Ende. Der Grund dafür ist, dass wir den Click-Handler nur auf die li setzen, die anfänglich vorhanden waren, aber nicht auf die neuen.

Korrigieren wir das Problem, indem wir auf das neue li einen Click-Handler setzen:

button.addEventListener('click', function() { let item = document.createElement('li'); item.textContent = 'item'; item.addEventListener('click', function() { // Click-Handler this.textContent = this.textContent + '!'; }); list.appendChild(item); });

Nun wird jedoch der Code der Handler-Funktion dupliziert - an zwei Stellen: für die anfänglich vorhandenen li und für die neuen. Beheben wir dies, indem wir ihn in eine separate Funktion auslagern:

function handler() { this.textContent = this.textContent + '!'; }

Verwenden wir unsere Funktion, um Codeduplizierung zu vermeiden:

for (let item of items) { item.addEventListener('click', handler); } button.addEventListener('click', function() { let item = document.createElement('li'); item.textContent = 'item'; item.addEventListener('click', handler); list.appendChild(item); });

Die Aufgabe ist im Grunde gelöst und wir haben die Duplizierung des Codes der Handler-Funktion vermieden. Allerdings müssen wir die Event-Handler weiterhin an zwei Stellen setzen: sowohl in der Schleife für die vorhandenen li, als auch beim Klick auf den Button. In der nächsten Lektion werden wir eine Möglichkeit kennenlernen, um diese Unbequemlichkeit zu beseitigen.

Deutsch
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wir verwenden Cookies für den Betrieb der Website, Analyse und Personalisierung. Die Datenverarbeitung erfolgt gemäß der Datenschutzerklärung.
alle akzeptieren anpassen ablehnen