Event bubbling ve capturing nedir? stopPropagation ile preventDefault arasındaki fark nedir?
Cevap
Bir DOM olayı üç fazda ilerler: capturing (window'dan hedefe doğru iner), target (hedefte) ve bubbling (hedeften window'a doğru çıkar). addEventListener varsayılan olarak bubbling fazında dinler.
<div id="parent"><button id="child">Tıkla</button></div>parent.addEventListener("click", () => console.log("parent capture"), { capture: true });
parent.addEventListener("click", () => console.log("parent bubble"));
child.addEventListener("click", () => console.log("child"));
// Tıklayınca: parent capture -> child -> parent bubblestopPropagation vs preventDefault
| Metot | Ne yapar? |
|---|---|
stopPropagation() | Olayın diğer elemanlara yayılmasını durdurur; tarayıcı varsayılan davranışı sürer |
stopImmediatePropagation() | Aynı elemandaki diğer dinleyicileri de durdurur |
preventDefault() | Tarayıcının varsayılan davranışını iptal eder (link açma, form gönderme); yayılma sürer |
form.addEventListener("submit", (e) => {
e.preventDefault(); // sayfa yenilenmez, olay yine yukarı kabarcıklanır
});Pratik notlar
event.targetolayı başlatan eleman,event.currentTargetdinleyicinin bağlı olduğu elemandır (event delegation'da önemli).focus,blur,mouseenterkabarcıklanmaz; delegation içinfocusin/focusoutkullanılır.stopPropagation'ı rastgele kullanmak dışarı tıklamayı dinleyen dropdown/analytics kodlarını bozar; dikkatli olun.{ passive: true }dinleyicilerdepreventDefaultçağrılamaz; scroll performansı için kullanılır.
İlgili JavaScript soruları
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.