Hi everyone! I'm the author of code.mu :)
I'd love to chat with my non-Russian audience. I'm looking for your feedback on the site and the translation quality. Let's chat:)
⊗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