JavaScript hodisa delegatsiyasi va ko'pikchi
Yuzta tugmaga yuzta tinglovchi qo’yish shart emas. Hodisalar sahifa bo’ylab yuqoriga ko’tarilishi tufayli bittasi bilan cheklanish mumkin.
Ko’pikchi — hodisa yuqoriga ko’tariladi
Bitta bosishdan uchta xabar chiqdi. Hodisa tugmadan boshlanib, ota elementlar bo’ylab yuqoriga ko’tarildi.
target va currentTarget
Farq muhim:
target— hodisa aslida qayerda yuz berdi (bosilgan tugma);currentTarget— tinglovchi qayerga o’rnatilgan (quti).
Delegatsiya naqshi
Shu farqdan foydalanib, bitta tinglovchi bilan ko’p elementni boshqarish:
Nega delegatsiya kerak
Asosiy sabab — keyin qo’shilgan elementlar:
Birinchi usulda har yangi element uchun tinglovchi qo’shish esdan chiqmasligi kerak. Delegatsiyada esa bir marta yozilgan tinglovchi kelajakdagi elementlarga ham ishlaydi.
closest — kerakli otani topish
<b> bosildi, lekin closest("li") yuqoriga qarab kerakli otani topdi.
Ichma-ich elementlar bo’lganda bu majburiy — target har doim eng ichkarisi
bo’ladi.
stopPropagation — ko’tarilishni to’xtatish
Amaliy misol — vazifalar ro’yxati
data-amal atributi qaysi tugma bosilganini aytadi — bu delegatsiyadagi
standart usul.
Amaliy mashq
- Ichma-ich uch div yasab, ko’pikchi tartibini kuzating;
targetvacurrentTargetni bir tinglovchida chiqaring;- ro’yxatga delegatsiya bilan o’chirish tugmasini qo’shing;
- yangi element qo’shib, tinglovchisiz ham ishlashini tasdiqlang;
closestbilan ichki<b>dan<li>ni toping;stopPropagationqo’shib, tashqi tinglovchi to’xtaganini ko’ring.
Qisqacha xulosa
- Hodisa nishondan yuqoriga ko’tariladi (bubbling).
target— hodisa yuz bergan element,currentTarget— tinglovchi joyi.- Delegatsiya: tinglovchi otaga, tekshiruv
targetorqali. - Bu keyin qo’shilgan elementlarga ham avtomatik ishlaydi.
closest(selektor)yuqoriga qarab mos otani topadi.stopPropagationko’tarilishni to’xtatadi — ehtiyot bilan ishlating.
Keyingi darsda DOM bilan chuqurroq ishlash — element yaratish va joylashtirish.