⊗jsPmOENEH 430 of 505 menu

Eseménykezelők hozzárendelése új elemekhez JavaScriptben

Tegyük fel, hogy van egy ul listánk és egy gombunk:

<ul> <li>elem</li> <li>elem</li> <li>elem</li> <li>elem</li> <li>elem</li> </ul> <button>hozzáad</button>

Kapjuk meg elemeinket a megfelelő változókba:

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

Tegyük úgy, hogy bármelyik li elemre kattintáskor egy felkiáltójel kerüljön a végére:

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

Most tegyük úgy, hogy a gomb megnyomásakor egy új li kerüljön a lista végére:

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

Azonban egy problémába fogunk ütközni: egy újonnan hozzáadott li elemre kattintás *nem* fog vezetni egy felkiáltójel hozzáadásához a végéhez. Ennek az az oka, hogy a kattintás eseménykezelőjét csak azokra a li elemekre rendeltük, amelyek kezdetben léteztek, de *nem az újakra*.

Javítsuk a problémát úgy, hogy a kattintás eseménykezelőjét rárendeljük az új li elemre is:

button.addEventListener('click', function() { let item = document.createElement('li'); item.textContent = 'elem'; item.addEventListener('click', function() { // kattintás eseménykezelő this.textContent = this.textContent + '!'; }); list.appendChild(item); });

Azonban most a kezelőfüggvény kódja megduplázódott két helyen - a kezdetben létező li elemekre és az újakra. Javítsuk ezt úgy, hogy kiemeljük egy külön függvénybe:

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

Használjuk a függvényünket a kóduplikálás elkerülésére:

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

A probléma alapvetően megoldódott, és elkerültük a kezelőfüggvény kódjának duplikálását. Azonban az eseménykezelők hozzárendelése továbbra is két helyen történik: a ciklusban a létező li elemekre, és a gombra kattintáskor. A következő leckében megvizsgálunk egy módot ennek a kényelmetlenségnek a megszüntetésére.

Magyar
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
A weboldal működéséhez, elemzéshez és személyre szabáshoz sütiket használunk. Az adatfeldolgozás a Adatvédelmi irányelvek szerint történik.
összes elfogadása beállítás elutasítás