stopPropagation
uniemożliwi jakiekolwiek macierzyste teleskopowe z wykonywany stopImmediatePropagation
będzie uniknąć teleskopowe rodzicielskich , a także wszelkie inne programy obsługi z wykonaniem
Szybki przykład z dokumentacji 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>
Pamiętaj, że kolejność wiązania zdarzeń jest tutaj ważna!
$("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>
Mały przykład pokazujący, jak działają oba te przestoje propagacji.
Pokaż fragment kodu
Są powiązane trzy procedury obsługi zdarzeń. Jeśli nie zatrzymamy żadnej propagacji, powinny pojawić się cztery alerty - trzy dotyczące div dziecka i jeden dla div rodzica.
Jeśli zatrzymamy rozprzestrzenianie się wydarzenia, pojawią się 3 alerty (wszystkie na wewnętrznym div dziecka). Ponieważ zdarzenie nie będzie propagowane w hierarchii DOM, div nadrzędny go nie zobaczy, a jego moduł obsługi nie uruchomi się.
Jeśli natychmiast zatrzymamy propagację, pojawi się tylko 1 alert. Mimo że do wewnętrznego div potomka są dołączone trzy procedury obsługi zdarzeń, wykonywana jest tylko 1, a wszelkie dalsze propagacje są natychmiast zabijane, nawet w obrębie tego samego elementu.
źródło
stopPropagation()
warianty również przestaną się propagować w hierarchii DOM. Nie tylko w górę. Proszę sprawdzić moją odpowiedź, aby uzyskać szczegółowe informacje na temat fazy przechwytywania.Z jQuery API :
W skrócie:
event.stopPropagation()
umożliwia wykonanie innych procedur obsługi tego samego elementu, a jednocześnieevent.stopImmediatePropagation()
zapobiega uruchomieniu każdego zdarzenia.źródło
event.stopImmediatePropagation
nie przestaje bulgotać, prawda?stopImmediatePropagation
zatrzymuje okres propagacji zdarzenia, oba z nich powinny zapobiegać propagacji, nic nie warte, że można również zmienić tryb przechwytywania, który wyzwoli najpierw najbardziej zewnętrzne elementy i tylko wtedy zejdź do dzieci (bąbelkowanie jest domyślne i działa w przeciwnym kierunku)event.stopPropagation
zapobiegnie uruchomieniu programów obsługi elementów nadrzędnych.Wywołanie
event.stopImmediatePropagation
zapobiegnie również uruchomieniu innych programów obsługi tego samego elementu.źródło
Jestem spóźniony, ale może mogę to powiedzieć na podstawie konkretnego przykładu:
Powiedz, jeśli masz
<table>
, z<tr>
, a następnie<td>
. Teraz, powiedzmy, że zestaw 3 obsługi zdarzeń dla<td>
elementu, a następnie, jeśli nieevent.stopPropagation()
w pierwszym obsługi zdarzeń dla ustawionej<td>
, wówczas wszystkie funkcje obsługi zdarzeń dla<td>
nadal będą działać , ale zdarzenie po prostu nie będzie rozprzestrzeniać się<tr>
lub<table>
(i nie będzie idą w górę i do<body>
,<html>
,document
, iwindow
).Teraz jednak, jeśli używasz
event.stopImmediatePropagation()
w swoim pierwszym obsługi zdarzeń, a następnie, dwa pozostałe do obsługi zdarzeń<td>
nie będzie działać i nie będzie rozprzestrzeniać się do<tr>
,<table>
(a nie pójdą w górę i do<body>
,<html>
,document
, iwindow
).Pamiętaj, że to nie tylko dla
<td>
. W przypadku innych elementów będzie on przestrzegać tej samej zasady.źródło
1)
event.stopPropagation():
=> Służy do zatrzymania wykonywania tylko odpowiedniego nadrzędnego modułu obsługi.2)
event.stopImmediatePropagation():
=> Służy do zatrzymania wykonywania odpowiedniego nadrzędnego modułu obsługi, a także modułu obsługi lub funkcji dołączonej do niego z wyjątkiem bieżącego modułu obsługi. => Zatrzymuje także całą procedurę obsługi dołączoną do bieżącego elementu całego DOM.Oto przykład: Jsfiddle !
Dzięki, -Sahil
źródło
event.stopPropagation () pozwala na wykonanie innych procedur obsługi tego samego elementu, podczas gdy event.stopImmediatePropagation () zapobiega uruchomieniu każdego zdarzenia. Na przykład patrz poniżej blok kodu jQuery.
Jeśli w poprzednim przykładzie użyto event.stopPropagation , to następne zdarzenie click na elemencie p, które zmienia css, zostanie uruchomione, ale w przypadku event.stopImmediatePropagation () , następne zdarzenie p click nie zostanie uruchomione.
źródło
O dziwo, wszystkie inne odpowiedzi mówią tylko połowę prawdy lub są w rzeczywistości błędne!
e.stopImmediatePropagation()
powstrzymuje dalsze wywoływanie przed tym wydarzeniem, bez wyjątkówe.stopPropagation()
jest podobny, ale nadal wywołuje wszystkie procedury obsługi dla tej fazy na tym elemencie, jeśli nie został już wywołanyJaka faza
Np. Zdarzenie kliknięcia zawsze najpierw przechodzi do końca DOM (zwane „fazą przechwytywania”), w końcu dociera do źródła zdarzenia („faza docelowa”), a następnie ponownie podnosi się („faza bąbelkowa”). I z
addEventListener()
niemu możesz zarejestrować wiele programów obsługi dla fazy przechwytywania i fazy bąbelkowej niezależnie. (Faza docelowa wywołuje procedury obsługi obu typów w celu bez rozróżnienia.)I o tym inne odpowiedzi są niepoprawne:
Skrzypce i mozilla.org faza wydarzenie wyjaśnienie z demo.
źródło
Tutaj dodaję mój przykład JSfiddle dla stopPropagation vs stopImmediatePropagation. JSFIDDLE
źródło