⊗jsPmOENEH 430 of 505 menu

Додавање обработувачи на нови елементи во JavaScript

Да претпоставиме дека имаме листа ul и копче:

<ul> <li>item</li> <li>item</li> <li>item</li> <li>item</li> <li>item</li> </ul> <button>add</button>

Ги добиваме нашите елементи во соодветните променливи:

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

Да направиме така што при клик на било која li да и се додаде извичник на крајот:

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

Сега да направиме така што при клик на копчето на крајот од листата да се додаде нова li:

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

Сепак, ќе наидеме на проблем: кликот на новододадената li нема да резултира со додавање на извичник на крајот. Проблемот е што ние го додаваме обработувачот на клик само на оние li кои постоеја иницијално, но не и на новите.

Да го поправиме проблемот, со додавање обработувач на клик на новата li:

button.addEventListener('click', function() { let item = document.createElement('li'); item.textContent = 'item'; item.addEventListener('click', function() { // обработувач на клик this.textContent = this.textContent + '!'; }); list.appendChild(item); });

Сепак, сега кодот на функцијата-обработувач се дуплира на две места - за постојните li и за новите. Да го исправиме ова, со тоа што ќе ја издвоиме функцијата посебно:

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

Ја користиме нашата функција, за да избегнеме дуплирање на кодот:

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

Проблемот е решен и избегнавме дуплирање на кодот на функцијата-обработувач. Сепак, да додаваме обработувачи на настани сè уште мораме на две места: и во циклусот за постојните li, и при клик на копчето. Во следната лекција ќе разгледаме начин како да се ослободиме од ова непријатност.

Македонски
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние користиме колачиња за работата на веб-страната, анализа и персонализација. Обработката на податоци се врши во согласност со Политиката за приватност.
прифати ги сите прилагоди одбиј