Terminologi
Dari quirksmode.org :
Pengambilan acara
Saat Anda menggunakan penangkapan acara
| |
--------------- | | -----------------
| element1 | | |
| ----------- | | ----------- |
| | element2 \ / | |
| ------------------------- |
| Acara CAPTURING |
-----------------------------------
pengendali event elemen1 pertama yang terbakar, pengendali event elemen2 terakhir.
Gelembung acara
Saat Anda menggunakan acara bubbling
/ \
--------------- | | -----------------
| element1 | | |
| ----------- | | ----------- |
| | elemen2 | | | |
| ------------------------- |
| Acara BUBBLING |
-----------------------------------
pengendali event elemen2 pertama yang dipecat, pengendali event elemen1 terakhir.
Setiap peristiwa yang terjadi dalam model acara W3C ditangkap pertama kali hingga mencapai elemen target dan kemudian muncul lagi .
| | / \
----------------- | | - | | -----------------
| element1 | | | | |
| ------------- | | - | | ----------- |
| | element2 \ / | | | |
| -------------------------------- |
| W3C model acara |
------------------------------------------
Antarmuka
Dari w3.org , untuk acara tangkap :
Jika penangkapan EventListener
ingin mencegah pemrosesan lebih lanjut dari peristiwa itu terjadi dapat memanggil stopPropagation
metode
Event
antarmuka. Ini akan mencegah pengiriman acara lebih lanjut, meskipun tambahan EventListeners
terdaftar di tingkat hierarki yang sama akan tetap menerima acara tersebut. Setelah metode acara stopPropagation
dipanggil, panggilan lebih lanjut ke metode tersebut tidak memiliki efek tambahan. Jika tidak ada penangkap tambahan yang ada dan
stopPropagation
belum dipanggil, acara memicu yang sesuai EventListeners
pada target itu sendiri.
Untuk acara bubbling :
Pengatur kejadian dapat memilih untuk mencegah penyebaran acara lebih lanjut dengan memanggil stopPropagation
metode Event
antarmuka. Jika ada yang
EventListener
memanggil metode ini, semua tambahan EventListeners
pada saat ini EventTarget
akan dipicu tetapi menggelegak akan berhenti pada tingkat itu. Hanya satu panggilan ke stopPropagation
diperlukan untuk mencegah menggelegak lebih lanjut.
Untuk pembatalan acara :
Pembatalan dilakukan dengan memanggil para Event
's preventDefault
metode. Jika satu atau lebih EventListeners
panggilan preventDefault
selama fase acara mengalir tindakan default akan dibatalkan.
Contohnya
Dalam contoh berikut, klik pada tautan di browser web memicu aliran acara (pendengar acara dieksekusi) dan tindakan default target acara (tab baru dibuka).
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);
Contoh 1 : menghasilkan output
DIV event capture
A event capture
A event bubbling
DIV event bubbling
Contoh 2 : menambahkan stopPropagation()
ke fungsi
function capturingOnClick1(ev) {
el.innerHTML += "DIV event capture<br>";
ev.stopPropagation();
}
menghasilkan output
DIV event capture
Pendengar acara mencegah penyebaran lebih lanjut ke bawah dan ke atas dari acara tersebut. Namun itu tidak mencegah tindakan default (pembukaan tab baru).
Contoh 3 : menambahkan stopPropagation()
ke fungsi
function capturingOnClick2(ev) {
el.innerHTML += "A event capture<br>";
ev.stopPropagation();
}
atau fungsinya
function bubblingOnClick2(ev) {
el.innerHTML += "A event bubbling<br>";
ev.stopPropagation();
}
menghasilkan output
DIV event capture
A event capture
A event bubbling
Ini karena kedua pendengar acara terdaftar pada target acara yang sama. Pendengar acara mencegah penyebaran lebih lanjut dari acara tersebut. Namun mereka tidak mencegah tindakan default (pembukaan tab baru).
Contoh 4 : menambahkan preventDefault()
ke fungsi apa pun, misalnya
function capturingOnClick1(ev) {
el.innerHTML += "DIV event capture<br>";
ev.preventDefault();
}
mencegah tab baru dari pembukaan.
event.stop
fungsinya ... Juga aneh aku tidak pernah punya masalah dengan itu. Saya menggunakan banyak menggelegak. Terima kasih untuk contohnya!