Junior
Brauzerdagi voqealar modeli nima?
sobes.tech AI
AIdan javob
Veb brauzerda foydalanuvchi bilan o'zaro ta'sirlarni (bosishlar, kiritish, ustiga bosish) va tizim voqealarini (sahifa yuklash, xatoliklar) boshqarish usuli.
Asosiy tushunchalar:
- Voqea: Sodir bo'lgan harakat.
- Voqeani boshqaruvchi (Event handler): Voqea yuz berganda bajariladigan funktsiya.
- Voqealar obyekti (Event object): Boshqaruvchiga o'tkaziladi va voqea haqida ma'lumotlarni o'z ichiga oladi (turi, element, koordinatalar va boshqalar).
Standart voqea oqimi:
- Qabool qilish (Capturing): Voqea DOMning eng yuqori elementidan (Window, Document) maqsad elementigacha tushadi. Bu bosqichdagi boshqaruvchilar birinchi bo'lib ishga tushadi.
- Maqsad bosqichi (Target phase): Voqea voqea yuz bergan maqsad elementiga yetib keladi.
- Bubbling (Bubbling): Voqea maqsad elementidan DOM daraxti bo'ylab yuqoriga ko'tariladi va Window ga yetadi. Bu bosqichdagi boshqaruvchilar qabool qilish va maqsad bosqichidan keyin ishga tushadi.
Boshqaruvchilarni qo'shish:
- HTML atributlari (
onclick,onload): Eskirgan usul, murakkab ilovalar uchun tavsiya etilmaydi. - DOM element xususiyatlari (
element.onclick): Har bir voqea turi uchun faqat bitta boshqaruvchini tayinlash mumkin.// Misol const button = document.querySelector('button'); button.onclick = function() { alert('Tugma bosildi!'); }; addEventListenermetodi: Eng yaxshi usul. Bir voqea uchun bir nechta boshqaruvchilarni qo'shish va boshqarish bosqichini (qabool qilish yoki bubblash) nazorat qilish imkonini beradi.// Misol const button = document.querySelector('button'); button.addEventListener('click', function(event) { console.log('Tugma bosildi!', event); }, false); // false - bubblash, true - qabool qilish
removeEventListener metodi boshqaruvchilarni olib tashlash uchun ishlatiladi.
Voqealarni delegatsiya qilish: Bir ota elementga boshqaruvchini qo'shish orqali bolalar elementlar voqealarini boshqarish. Resurslarni tejash va dinamik mazmun bilan ishlashni soddalashtiradi.
// Delegatsiya misoli
const list = document.querySelector('ul');
list.addEventListener('click', function(event) {
if (event.target.tagName === 'LI') {
console.log('Roʻyxat elementiga bosildi:', event.target.textContent);
}
});