⊗jsPmOENEH 430 of 505 menu

Tilføjelse af event handlers til nye elementer i JavaScript

Lad os sige, at vi har en liste ul og en knap:

<ul> <li>element</li> <li>element</li> <li>element</li> <li>element</li> <li>element</li> </ul> <button>tilføj</button>

Lad os hente vores elementer ind i de tilsvarende variable:

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

Lad os gøre det, så der ved et klik på enhver li tilføjes et udråbstegn til slutningen:

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

Lad os nu gøre det, så der ved et klik på knappen tilføjes en ny li til slutningen af listen:

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

Vi vil dog støde på et problem: et klik på den nyligt tilføjede li vil ikke føre til tilføjelsen af et udråbstegn i slutningen. Grunden er, at vi tilføjer klik-handleren kun til de li, som eksisterede oprindeligt, men ikke til de nye.

Lad os rette problemet ved at tilføje en klik-handler til den nye li:

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

Nu bliver koden for handler-funktionen dog duplikeret på to steder - for de oprindeligt eksisterende li og for de nye. Lad os rette dette ved at flytte den til en separat funktion:

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

Lad os bruge vores funktion for at undgå kodeduplicering:

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

Opgaven er egentlig løst, og vi har undgået duplicering af handler-funktionens kode. Vi er dog stadig nødt til at tilføje event handlers på to steder: både i løkken for de eksisterende li og ved klik på knappen. I den næste lektion vil vi se på en metode til at undgå denne ubehagelighed.

Dansk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDeutschΕλληνικά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
Vi bruger cookies til webstedets funktion, analyse og personalisering. Behandling af data foregår i henhold til Fortrolighedspolitikken.
accepter alle tilpas afvis