⊗jsPmOENEH 430 of 505 menu

Dodavanje event handlera na nove elemente u JavaScriptu

Neka imamo listu ul i dugme:

<ul> <li>stavka</li> <li>stavka</li> <li>stavka</li> <li>stavka</li> <li>stavka</li> </ul> <button>dodaj</button>

Hvatamo naše elemente u odgovarajuće promenljive:

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

Učinimo da na klik bilo koje li joj se na kraj doda uzvičnik:

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

Hajde sada da učinimo da na pritisak na dugme na kraj liste doda nova li:

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

Međutim, dobićemo problem: klik na novu dodatu li neće dovesti do dodavanja uzvičnika na kraj. Stvar je u tome što dodajemo handler klika samo na one li koje su postojale na početku, ali ne na nove.

Ispravimo problem, dodavši na novu li handler klika:

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

Međutim, sada se kod funkcije-handlera duplira na dva mesta - za prvobitno postojeće li i za nove. Ispravimo ovo, izdvojivši ga u posebnu funkciju:

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

Iskoristimo našu funkciju da izbegnemo dupliranje koda:

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

Zadatak je u suštini rešen i izbegli smo dupliranje koda funkcije-handlera. Međutim, dodavati event handlere i dalje moramo na dva mesta: i u petlji za postojeće li, i na klik dugmeta. U sledećoj lekciji ćemo razmotriti način da se rešimo ovog neudobstva.

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij