⊗jsPmOENEH 430 of 505 menu

Pridávanie obslužných rutín k novým prvkom v JavaScripte

Predpokladajme, že máme zoznam ul a tlačidlo:

<ul> <li>položka</li> <li>položka</li> <li>položka</li> <li>položka</li> <li>položka</li> </ul> <button>pridať</button>

Získajme naše prvky do príslušných premenných:

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

Nastavme to tak, aby po kliknutí na ľubovoľnú li sa jej na koniec pridala výkričník:

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

Teraz nastavme, aby po stlačení tlačidla sa na koniec zoznamu pridala nová li:

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

Avšak narazíme na problém: kliknutie na novú pridanú li nepovedie k pridaniu výkričníka na koniec. Dôvod je v tom, že pridávame obslužnú rutinu kliknutia len na tie li, ktoré existovali spočiatku, ale nie na nové.

Opravme problém pridaním obslužnej rutiny kliknutia na novú li:

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

Avšak teraz sa kód obslužnej funkcie duplikuje na dvoch miestach - pre pôvodne existujúce li a pre nové. Opravme to vyňatím jeho do samostatnej funkcie:

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

Použime našu funkciu, aby sme sa vyhli duplikovaniu 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 podstate vyriešená a vyhli sme sa duplikovaniu kódu obslužnej funkcie. Avšak, pridávať obslužné rutiny udalostí nám aj tak príde na dvoch miestach: both v cykle pre existujúce li, a pri kliknutí na tlačidlo. V nasledujúcej lekcii si predstavíme spôsob, ako sa tohto nepohodlia zbaviť.

Slovenčina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť