terminoloji
Gönderen quirksmode.org :
Etkinlik yakalama
Etkinlik yakalamayı kullandığınızda
| |
--------------- | | -----------------
| element1 | | |
| ----------- | | ----------- |
| | element2 \ / | |
| ------------------------- |
| Etkinlik YAKALAMA |
-----------------------------------
ilk olarak element1 olay işleyicisi tetiklenir, son olarak element2 olay işleyicisi tetiklenir.
Olay köpürme
Olay köpürme kullandığınızda
/ \
--------------- | | -----------------
| element1 | | |
| ----------- | | ----------- |
| | element2 | | | |
| ------------------------- |
| Etkinlik BUBBLING |
-----------------------------------
ilk olarak element2 olay işleyicisi tetiklenir, son olarak element1 olay işleyicisi tetiklenir.
W3C olay modelinde gerçekleşen herhangi bir olay ilk olarak hedef öğeye ulaşana kadar yakalanır ve ardından tekrar kabarır .
| | / \
----------------- | | - | | -----------------
| element1 | | | | |
| ------------- | | - | | ----------- |
| | element2 \ / | | | |
| -------------------------------- |
| W3C olay modeli |
------------------------------------------
Arayüz
Gönderen W3.org için, olay yakalama :
Eğer yakalama EventListener, olayın daha fazla işlenmesini önlemek istiyorsa stopPropagation, Eventarabirimin yöntemini
çağırabilir . EventListenersAynı hiyerarşi düzeyinde kaydedilen ek etkinlik yine de alınmasına rağmen, bu, etkinliğin daha fazla gönderilmesini önleyecektir . Bir etkinliğin stopPropagation
yöntemi çağrıldıktan sonra, bu yönteme yapılan başka çağrıların ek bir etkisi olmaz. Ek yakalayıcı yoksa ve
stopPropagationçağrılmadıysa, olay uygun olanı EventListenershedefte tetikler .
İçin olay köpüren :
Herhangi bir olay işleyici stopPropagation, Eventarabirimin yöntemini çağırarak daha fazla olay yayılmasını engellemeyi seçebilir . Herhangi biri
EventListenerbu yöntemi çağırırsa EventListeners, akımdaki tüm ek EventTargettetiklenir, ancak bu seviyede kabarcıklanma durur. stopPropagationDaha fazla köpürmeyi önlemek için yalnızca bir çağrı gerekir.
İçin olay iptali :
İptal
yöntemi Event' preventDefaultyöntemi kullanılarak gerçekleştirilir. Olay akışının herhangi bir aşamasında bir veya daha fazla EventListenersçağrı yapılırsa preventDefault, varsayılan eylem iptal edilir.
Örnekler
Aşağıdaki örneklerde, web tarayıcısındaki köprüye tıklamak olayın akışını (olay dinleyicileri yürütülür) ve olay hedefinin varsayılan eylemini (yeni bir sekme açılır) tetikler.
HTML:
<div id="a">
<a id="b" href="http://www.google.com/" target="_blank">Google</a>
</div>
<p id="c"></p>
JavaScript:
var el = document.getElementById("c");
function capturingOnClick1(ev) {
el.innerHTML += "DIV event capture<br>";
}
function capturingOnClick2(ev) {
el.innerHTML += "A event capture<br>";
}
function bubblingOnClick1(ev) {
el.innerHTML += "DIV event bubbling<br>";
}
function bubblingOnClick2(ev) {
el.innerHTML += "A event bubbling<br>";
}
// The 3rd parameter useCapture makes the event listener capturing (false by default)
document.getElementById("a").addEventListener("click", capturingOnClick1, true);
document.getElementById("b").addEventListener("click", capturingOnClick2, true);
document.getElementById("a").addEventListener("click", bubblingOnClick1, false);
document.getElementById("b").addEventListener("click", bubblingOnClick2, false);
Örnek 1 : çıktı ile sonuçlanır
DIV event capture
A event capture
A event bubbling
DIV event bubbling
Örnek 2 : ilave stopPropagation()fonksiyona
function capturingOnClick1(ev) {
el.innerHTML += "DIV event capture<br>";
ev.stopPropagation();
}
sonuç çıktı
DIV event capture
Olay dinleyicisi, olayın aşağı ve yukarı doğru ilerlemesini engelledi. Ancak, varsayılan eylemi engellemedi (yeni bir sekme açma).
Örnek 3 : ilave stopPropagation()fonksiyona
function capturingOnClick2(ev) {
el.innerHTML += "A event capture<br>";
ev.stopPropagation();
}
veya işlev
function bubblingOnClick2(ev) {
el.innerHTML += "A event bubbling<br>";
ev.stopPropagation();
}
sonuç çıktı
DIV event capture
A event capture
A event bubbling
Bunun nedeni, her iki olay dinleyicisinin de aynı olay hedefine kayıtlı olmasıdır. Olay dinleyicileri, olayın yukarı doğru yayılmasını engelledi. Ancak, varsayılan işlemi engellemediler (yeni bir sekme açma).
Örnek 4 : preventDefault()Herhangi bir işleve ekleme , örneğin
function capturingOnClick1(ev) {
el.innerHTML += "DIV event capture<br>";
ev.preventDefault();
}
yeni bir sekmenin açılmasını engeller.
event.stopO sorun hiç olmadı da tuhaf ... işlevi. Köpürmeyi çok kullanıyorum. Örnek için teşekkürler!