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
, Event
arabirimin yöntemini
çağırabilir . EventListeners
Aynı 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ı EventListeners
hedefte tetikler .
İçin olay köpüren :
Herhangi bir olay işleyici stopPropagation
, Event
arabirimin yöntemini çağırarak daha fazla olay yayılmasını engellemeyi seçebilir . Herhangi biri
EventListener
bu yöntemi çağırırsa EventListeners
, akımdaki tüm ek EventTarget
tetiklenir, ancak bu seviyede kabarcıklanma durur. stopPropagation
Daha fazla köpürmeyi önlemek için yalnızca bir çağrı gerekir.
İçin olay iptali :
İptal
yöntemi Event
' preventDefault
yö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.stop
O sorun hiç olmadı da tuhaf ... işlevi. Köpürmeyi çok kullanıyorum. Örnek için teşekkürler!