⊗jsPmOENEH 430 of 505 menu

JavaScript-те жаңа элементтерге оқиға өңдеушілерін бекіту

Бізде ul тізімі және батырма болсын:

<ul> <li>элемент</li> <li>элемент</li> <li>элемент</li> <li>элемент</li> <li>элемент</li> </ul> <button>қосу</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 = 'элемент'; list.appendChild(item); });

Алайда, біз мәселеге тап боламыз: жаңа қосылған li-ге шерту леп белгісінің соңына қосылуға әкелмейді. Себебі, біз бастапқыда бар болған li-лерге ғана шерту өңдеушісін қосамыз, бірақ жаңаларына емес.

Мәселені жаңа li-ге шерту өңдеушісін бекіту арқылы шешейік:

button.addEventListener('click', function() { let item = document.createElement('li'); item.textContent = 'элемент'; 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.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 файлдарын қолданамыз. Деректерді өңдеу Құпиялылық саясаты бойынша жүреді.
барлығын қабылдау баптау қабылдамау