⊗jsPmOENEH 430 of 505 menu

JavaScript-də yeni elementlərə hadise emalçılarının əlavə edilməsi

Tutaq ki, bizim ul siyahısı və düyməmiz var:

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

Elementlərimizi uyğun dəyişənlərə əldə edək:

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

Gəlin elə edək ki, hər hansı li üzərində kliklədikdə onun sonuna nida işarəsi əlavə olunsun:

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

Gəlin indi düyməyə basıldıqda siyahının sonuna yeni li əlavə olunsun:

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

Lakin, biz problemlə qarşılaşacıq: yeni əlavə edilmiş li üzərində klik onun sonuna nida işarəsi əlavə edilməsinə səbəb olmayacaq. Məsələ ondadır ki, biz klik əməliyyatçısını yalnız əvvəlcədən mövcud olan li elementlərinə əlavə edirik, lakin yeni olanlara deyil.

Problemi həll edək, yeni li üçün klik emalçısı əlavə edək:

button.addEventListener('click', function() { let item = document.createElement('li'); item.textContent = 'item'; item.addEventListener('click', function() { // klik emalçısı this.textContent = this.textContent + '!'; }); list.appendChild(item); });

Lakin, indi funksiya-emalçının kodu iki yerdə təkrarlanır - ilkin mövcud olan li elementləri və yeniləri üçün. Bunu aradan qaldıraq, onu ayrı bir funksiyaya çıxaraq:

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

Kod təkrarlanmasının qarşısını almaq üçün funksiyamızdan istifadə edək:

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); });

Problem ümumiyyətlə həll olunub və biz funksiya-emalçının kodunun təkrarlanmasının qarşısını aldıq. Lakin, hadisə emalçılarını əlavə etmək bizim üçün hələ də iki yerdə qalır: həm mövcud li elementləri üçün dövrdə, hem də düyməyə kliklədikdə. Növbəti dərsdə bu narahatlıqdan qurtulmağın bir yolunu nəzərdən keçirəcəyik.

Azərbaycan
AfrikaansБългарскиবাংলাБеларускаяČ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
Biz saytin işi, analitika və fərdiləşdirmə üçün cookie istifadə edirik. Məlumatların emalı Məxfilik Siyasəti əsasında həyata keçirilir.
hamısını qəbul et konfiqurasiya et rədd et