⊗jsPmOENEH 430 of 505 menu

Přidávání obslužných rutin k novým prvkům v JavaScriptu

Předpokládejme, že máme seznam ul a tlačítko:

<ul> <li>položka</li> <li>položka</li> <li>položka</li> <li>položka</li> <li>položka</li> </ul> <button>přidat</button>

Získáme naše prvky do odpovídajících proměnných:

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

Zařídíme, aby po kliknutí na jakoukoli li se na její konec přidal vykřičník:

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

Nyní udělejme to, aby po stisknutí tlačítka se na konec seznamu přidala nová li:

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

Dostaneme však problém: kliknutí na nově přidanou li nepovede k přidání vykřičníku na konec. Jde o to, že přidáváme obslužnou rutinu kliknutí pouze na ty li, které existovaly původně, ale ne na nové.

Problém opravíme přidáním obslužné rutiny kliknutí na novou li:

button.addEventListener('click', function() { let item = document.createElement('li'); item.textContent = 'položka'; item.addEventListener('click', function() { // obslužná rutina kliknutí this.textContent = this.textContent + '!'; }); list.appendChild(item); });

Nyní se však kód funkce-obslužné rutiny duplikuje na dvou místech - pro původně existující li a pro nové. Opravme to jejím vyjmutím do samostatné funkce:

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

Použijeme naši funkci, abychom se vyhnuli duplikování kódu:

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

Úloha je v podstatě vyřešena a vyhnuli jsme se duplikování kódu funkce-obslužné rutiny. Nicméně, přidávat obslužné rutiny událostí nám stále musíme na dvou místech: jak ve smyčce pro existující li, tak při kliknutí na tlačítko. V následující lekci si rozebereme způsob, jak se tohoto nepohodlí zbavit.

Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικά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
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout