⊗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šuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Мы выкарыстоўваем cookie для працы сайта, аналітыкі і персаналізацыі. Апрацоўка дадзеных адбываецца згодна Палітыкай канфідэнцыяльнасці.
прыняць усе наладзіць адхіліць