stopPropagation
akan mencegah orang tua penangan dari yang dieksekusi stopImmediatePropagation
akan mencegah penangan induk dan juga setiap lain penangan dari mengeksekusi
Contoh cepat dari dokumentasi jquery:
$("p").click(function(event) {
event.stopImmediatePropagation();
});
$("p").click(function(event) {
// This function won't be executed
$(this).css("background-color", "#f00");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>example</p>
Perhatikan bahwa urutan acara mengikat penting di sini!
$("p").click(function(event) {
// This function will now trigger
$(this).css("background-color", "#f00");
});
$("p").click(function(event) {
event.stopImmediatePropagation();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>example</p>
Sebuah contoh kecil untuk menunjukkan bagaimana kedua propagasi ini berhenti bekerja.
Tampilkan cuplikan kode
Ada tiga event handler yang terikat. Jika kita tidak menghentikan propagasi apa pun, maka harus ada empat peringatan - tiga pada div anak, dan satu pada div orangtua.
Jika kita menghentikan acara dari menyebarkan, maka akan ada 3 peringatan (semua di div anak batin). Karena acara tidak akan menyebarkan hierarki DOM, div induk tidak akan melihatnya, dan penangannya tidak akan diaktifkan.
Jika kami menghentikan propagasi segera, maka hanya akan ada 1 peringatan. Meskipun ada tiga event handler yang melekat pada div anak dalam, hanya 1 yang dieksekusi dan setiap propagasi selanjutnya dibunuh segera, bahkan dalam elemen yang sama.
sumber
stopPropagation()
varian juga akan berhenti merambat ke hierarki DOM. Bukan hanya sampai. Silakan periksa jawaban saya untuk detail dengan fase tangkap.Dari API jQuery :
Singkatnya:
event.stopPropagation()
memungkinkan penangan lain pada elemen yang sama dieksekusi, sementaraevent.stopImmediatePropagation()
mencegah setiap peristiwa dari berjalan.sumber
event.stopImmediatePropagation
tidak berhenti menggelegak kan?stopImmediatePropagation
menghentikan acara dari periode yang diperbanyak, keduanya harus mencegah gelembung, tidak ada artinya bahwa Anda juga dapat mengubah mode untuk menangkap yang akan memicu elemen terluar terlebih dahulu dan baru kemudian turun ke anak-anak (menggelegak adalah default, dan bekerja dalam arah yang berlawanan)event.stopPropagation
akan mencegah penangan pada elemen induk berjalan.Memanggil
event.stopImmediatePropagation
juga akan mencegah penangan lain pada elemen yang sama berjalan.sumber
Saya terlambat datang, tapi mungkin saya bisa mengatakan ini dengan contoh khusus:
Katakan, jika Anda memiliki
<table>
, dengan<tr>
, dan kemudian<td>
. Sekarang, katakanlah Anda menetapkan 3 pengendali event untuk<td>
elemen, maka jika Anda melakukannyaevent.stopPropagation()
pada pengendali event pertama yang Anda setel<td>
, maka semua penangan event<td>
akan tetap berjalan , tetapi event tidak akan menyebar ke<tr>
atau<table>
(dan tidak akan naik dan sampai<body>
,<html>
,document
, danwindow
).Sekarang, bagaimanapun, jika Anda menggunakan
event.stopImmediatePropagation()
dalam event handler pertama Anda, kemudian, dua event handler lainnya untuk<td>
WILL NOT berjalan , dan tidak akan menyebarkan hingga<tr>
,<table>
(dan tidak akan naik dan sampai<body>
,<html>
,document
, danwindow
).Perhatikan bahwa ini bukan hanya untuk
<td>
. Untuk elemen lain, itu akan mengikuti prinsip yang sama.sumber
1)
event.stopPropagation():
=> Digunakan untuk menghentikan eksekusi dari induknya saja.2)
event.stopImmediatePropagation():
=> Digunakan untuk menghentikan eksekusi induknya yang sesuai dan juga pengendali atau fungsi yang melekat pada dirinya sendiri kecuali pengendali saat ini. => Ini juga menghentikan semua pawang yang melekat pada elemen saat ini dari seluruh DOM.Berikut ini contohnya: Jsfiddle !
Terima kasih, -Mungkin
sumber
event.stopPropagation () memungkinkan penangan lain pada elemen yang sama untuk dieksekusi, sementara event.stopImmediatePropagation () mencegah setiap acara dari berjalan. Misalnya, lihat di bawah blok kode jQuery.
Jika event.stopPropagation digunakan dalam contoh sebelumnya, maka acara klik berikutnya pada elemen p yang mengubah css akan diaktifkan, tetapi jika case.stopImmediatePropagation () , acara p klik berikutnya tidak akan menyala.
sumber
Anehnya, semua jawaban lain hanya mengatakan setengah kebenaran atau sebenarnya salah!
e.stopImmediatePropagation()
menghentikan penangan lebih lanjut dipanggil untuk acara ini, tidak ada pengecualiane.stopPropagation()
serupa, tetapi masih memanggil semua penangan untuk fase ini pada elemen ini jika belum dipanggilFase apa
Misalnya acara klik akan selalu terlebih dahulu berjalan turun ke DOM (disebut "fase penangkapan"), akhirnya mencapai asal acara ("fase target") dan kemudian melambung ke atas lagi ("fase gelembung"). Dan dengan
addEventListener()
Anda dapat mendaftarkan beberapa penangan untuk fase penangkapan dan fase gelembung secara mandiri. (Fase target memanggil penangan kedua jenis pada target tanpa membedakan.)Dan inilah jawaban salah lainnya:
Sebuah biola dan mozilla.org fase acara penjelasan dengan demo.
sumber
Di sini saya menambahkan contoh JSfiddle saya untuk stopPropagation vs stopImmediatePropagation. JSFIDDLE
sumber