stopPropagation
powstrzymuje wydarzenie przed pojawieniem się łańcucha zdarzeń.
preventDefault
zapobiega domyślnemu działaniu przeglądarki w przypadku tego zdarzenia.
Przykłady
preventDefault
$("#but").click(function (event) {
event.preventDefault()
})
$("#foo").click(function () {
alert("parent click event fired!")
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="foo">
<button id="but">button</button>
</div>
stopPropagation
$("#but").click(function (event) {
event.stopPropagation()
})
$("#foo").click(function () {
alert("parent click event fired!")
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="foo">
<button id="but">button</button>
</div>
Z stopPropagation
tylko button
's click obsługi nazywa natomiast div
jest kliknięcie Wózek nigdy pożary.
Gdzie tak, jakbyś używał preventDefault
, tylko domyślna akcja przeglądarki jest zatrzymywana, ale moduł obsługi kliknięć div nadal działa.
Poniżej znajdują się niektóre dokumenty dotyczące właściwości zdarzeń DOM i metod z MDN:
W przypadku IE9 i FF można po prostu użyć funkcji preventDefault & stopPropagation.
Do wspierania IE8 i obniżyć zastąpić stopPropagation
z cancelBubble
i wymienić preventDefault
zreturnValue
event.stop
pełnią obie funkcje ... Dziwne, że nigdy nie miałem z tym problemu. Często używam bulgotania. Dzięki za przykład!cancelBubble
ireturnValue
oba są właściwościami (tak powinny być ustawionecancelBubble = true;
), i żepreventDefault
istopPropagation
są metodami (tak należy nazwaćpreventDefault();
)stopDefault()
nie działa tak samo jakstopPropagation()
. Jeśli domyślna akcja nie wywołujeonclick
metody, co to jest?Terminologia
Z quirksmode.org :
Berło
Z w3.org , do przechwytywania zdarzeń :
W przypadku propagacji zdarzeń :
Aby anulować wydarzenie :
Przykłady
W poniższych przykładach kliknięcie hiperłącza w przeglądarce internetowej uruchamia przepływ zdarzenia (detektory zdarzeń są wykonywane) i domyślną akcję celu zdarzenia (otwiera się nowa karta).
HTML:
JavaScript:
Przykład 1 : daje wynik
Przykład 2 : dodanie
stopPropagation()
do funkcjidaje wynik
Detektor zdarzeń uniemożliwił dalszą propagację zdarzenia w dół i w górę. Nie zapobiegło to jednak domyślnej akcji (otwarcie nowej karty).
Przykład 3 : dodanie
stopPropagation()
do funkcjilub funkcja
daje wynik
Jest tak, ponieważ oba detektory zdarzeń są zarejestrowane w tym samym celu zdarzenia. Detektory zdarzeń uniemożliwiły dalszą propagację zdarzenia w górę. Nie zapobiegły one jednak domyślnej akcji (otwarcie nowej karty).
Przykład 4 : na przykład dodanie
preventDefault()
do dowolnej funkcjizapobiega otwieraniu nowej karty.
źródło
zwracać fałsz;
return false;
robi 3 oddzielne rzeczy, gdy go nazwiesz:event.preventDefault()
- Zatrzymuje domyślne zachowanie przeglądarki.event.stopPropagation()
- Zapobiega propagowaniu zdarzenia (lub „propagowaniu”) DOM.Zauważ, że to zachowanie różni się od zwykłych (nie jQuery) programów obsługi zdarzeń, w których, w szczególności,
return false
nie powstrzymuje to wystąpienia zdarzenia.preventDefault ();
preventDefault();
robi jedno: zatrzymuje domyślne zachowanie przeglądarki.Kiedy ich używać?
Wiemy, co robią, ale kiedy ich używać? Po prostu zależy to od tego, co chcesz osiągnąć. Użyj,
preventDefault();
jeśli chcesz „po prostu” zapobiec domyślnemu zachowaniu przeglądarki. Użyj return false; gdy chcesz zapobiec domyślnemu zachowaniu przeglądarki i uniemożliwić propagowanie DOM przez zdarzenie. W większości sytuacji, w których użyłbyś return return; tak naprawdę chceszpreventDefault()
.Przykłady:
Spróbujmy zrozumieć na przykładach:
Zobaczymy czysty przykład JAVASCRIPT
Przykład 1:
Przykład 2:
Przykład 3:
Przykład 4:
Przykład 5:
przypadki:
Zobaczę wszystkie trzy przykłady.
Mam nadzieję, że te przykłady są jasne. Spróbuj wykonać wszystkie te przykłady w pliku HTML, aby zobaczyć, jak działają.
źródło
Oto cytat stąd
Event.preventDefault
Metoda preventDefault zapobiega realizacji domyślnej funkcji przez zdarzenie. Na przykład użyłbyś funkcji preventDefault dla elementu A, aby zatrzymać klikanie tego elementu przed opuszczeniem bieżącej strony:
Chociaż domyślna funkcjonalność elementu jest zamurowana, zdarzenie nadal powoduje powiększenie modelu DOM.
Event.stopPropagation
Druga metoda, stopPropagation, umożliwia domyślną funkcjonalność zdarzenia, ale uniemożliwia jego propagowanie:
stopPropagation skutecznie powstrzymuje elementy nadrzędne od wiedzy o danym zdarzeniu na jego dziecku.
źródło
Event.preventDefault - zatrzymuje domyślne zachowanie przeglądarki. Teraz pojawia się domyślne zachowanie przeglądarki. Załóżmy, że masz tag kotwicy i ma on atrybut href, a ten tag kotwicy jest zagnieżdżony w tagu div, który ma zdarzenie click. Domyślnym zachowaniem znacznika zakotwiczenia jest kliknięcie znacznika zakotwiczenia, po którym powinien nawigować, ale to, co robi event.preventDefault, zatrzymuje nawigację w tym przypadku. Ale nigdy nie zatrzymuje bulgotania zdarzenia lub eskalacji zdarzenia, tj
Wynik będzie
„element został kliknięty”
„pojemnik został kliknięty”
Teraz event.StopPropation przestaje bulgotać zdarzenie lub eskalację zdarzenia. Teraz z powyższym przykładem
Wynik będzie
„element został kliknięty”
Aby uzyskać więcej informacji, skorzystaj z tego łącza https://codeplanet.io/preventdefault-vs-stoppropagation-vs-stopimmediatepropagation/
źródło
event.preventDefault();
Zatrzymuje działanie domyślnej akcji elementu.event.stopPropagation();
Zapobiega propagacji zdarzenia w drzewie DOM, zapobiegając powiadamianiu o zdarzeniu przez wszystkie programy nadrzędne.Na przykład, jeśli istnieje link z metodą kliknięcia dołączoną wewnątrz a
DIV
lubFORM
która ma również dołączoną metodę kliknięcia, uniemożliwi to uruchomienie metodyDIV
lubFORM
kliknięcia.źródło
źródło