Jeśli chcę uniemożliwić wykonywanie innych procedur obsługi zdarzeń po uruchomieniu określonego zdarzenia, mogę użyć jednej z dwóch technik. W przykładach użyję jQuery, ale dotyczy to również zwykłego JS:
1. event.preventDefault()
$('a').click(function (e) {
// custom handling here
e.preventDefault();
});
2) return false
$('a').click(function () {
// custom handling here
return false;
});
Czy istnieje jakaś znacząca różnica między tymi dwiema metodami zatrzymywania propagacji zdarzeń?
Dla mnie return false;
jest prostszy, krótszy i prawdopodobnie mniej podatny na błędy niż wykonywanie metody. Metodą należy pamiętać o prawidłowej obudowie, nawiasie itp.
Ponadto muszę zdefiniować pierwszy parametr w wywołaniu zwrotnym, aby móc wywołać metodę. Być może istnieje kilka powodów, dla których powinienem unikać robienia tego w ten sposób i preventDefault
zamiast tego używać ? Jaki jest lepszy sposób?
preventDefault
jest nie uniemożliwić innym handers z wykonaniem. Po tostopImmediatePropagation
jest.Odpowiedzi:
return false
z poziomu modułu obsługi zdarzeń jQuery działa tak samo, jak wywoływanie obue.preventDefault
ie.stopPropagation
na przekazany obiekt jQuery.Event.e.preventDefault()
zapobiegnie wystąpieniu zdarzenia domyślnego,e.stopPropagation()
zapobiegnie pojawieniu się zdarzenia ireturn false
zrobi jedno i drugie. Należy zauważyć, że ten różni się od zachowania normalnego (nie jQuery) obsługi zdarzeń, w której, w szczególności,return false
czy nie zatrzymania fazy spienieniu się.Źródło: John Resig
Jakieś korzyści z używania event.preventDefault () nad „return false” w celu anulowania kliknięcia href?
źródło
return false
z modułu obsługi DOM2 (addEventListener
) w ogóle nic nie robi (ani nie zapobiega ustawieniu domyślnemu, ani nie przestajeattachEvent
propagować; od modułu obsługi DOM2 firmy Microsoft ( ), zapobiega domyślnemu, ale nie propagacji; z modułu obsługi DOM0 (onclick="return ..."
), zapobiega domyślnemu (pod warunkiem umieściszreturn
w atrybucie), ale nie propagujesz; z procedury obsługi zdarzeń jQuery robi to obie, ponieważ jest to jQuery. Szczegóły i testy na żywo tutajreturn false
ma nie zatrzymać propagacji zdarzeń w obsługi zdarzeń non-jQuery. tzn<a href="#" onclick="return false">Test</a>
czy nie zatrzymać zdarzenie od propagacji w górę.Z mojego doświadczenia wynika, że istnieje co najmniej jedna wyraźna przewaga podczas używania event.preventDefault () nad używaniem return false. Załóżmy, że przechwytujesz zdarzenie kliknięcia w tagu zakotwiczenia, w przeciwnym razie byłby to duży problem, gdyby użytkownik został odsunięty od bieżącej strony. Jeśli program obsługi kliknięć używa return false w celu uniemożliwienia nawigacji w przeglądarce, otwiera to możliwość, że interpreter nie dotrze do instrukcji return, a przeglądarka rozpocznie domyślne zachowanie tagu kotwicy.
Zaletą użycia event.preventDefault () jest to, że możesz dodać to jako pierwszą linię w module obsługi, gwarantując w ten sposób, że domyślne zachowanie kotwicy nie zostanie uruchomione, niezależnie od tego, czy nie zostanie osiągnięty ostatni wiersz funkcji (np. Błąd czasu wykonywania ).
źródło
To nie jest, jak to ująłeś, pytanie „JavaScript”; jest to pytanie dotyczące projektu jQuery.
jQuery i poprzednio powiązany cytat z Jana Resig (w karim79 za wiadomości ) wydają się być źródłem nieporozumień, w jaki sposób obsługi zdarzeń w ogólnej pracy.
Fakt: Procedura obsługi zdarzenia, która zwraca wartość false, uniemożliwia domyślną akcję dla tego zdarzenia. Nie zatrzymuje propagacji zdarzeń. Procedury obsługi zdarzeń zawsze działały w ten sposób, od dawnych czasów Netscape Navigator.
Dokumentacja z MDN wyjaśnia, jak
return false
w działa obsługa zdarzeńTo, co dzieje się w jQuery, nie jest tym samym, co dzieje się z procedurami obsługi zdarzeń. Odbiorniki zdarzeń DOM i „załączone” zdarzenia MSIE to zupełnie inna sprawa.
Więcej informacji można znaleźć w attachEvent na MSDN i w dokumentacji W3C DOM 2 Events .
źródło
return false
to samoevent.preventDefault()
. Ale nie wiem; wystarczy, żebym wziął to ze szczyptą soli.jQuery
jest jedynie podzbiorem JavaScript, a nie własnym językiem.Ogólnie rzecz biorąc, pierwszą opcją (
preventDefault()
) jest ta, którą musisz wziąć, ale musisz wiedzieć, w jakim kontekście jesteś i jakie są twoje cele.Paliwowego Kodowanie ma wielki artykuł o
return false;
vsevent.preventDefault()
vsevent.stopPropagation()
vsevent.stopImmediatePropagation()
.źródło
Korzystając z jQuery,
return false
robi 3 osobne rzeczy, gdy go wywołujesz:event.preventDefault();
event.stopPropagation();
Zobacz jQuery Events: Stop (Mis) using Return False, aby uzyskać więcej informacji i przykładów.
źródło
Możesz zawiesić wiele funkcji na
onClick
zdarzeniu dla jednego elementu. Jak możesz być pewien, żefalse
ten będzie ostatnim, który strzela?preventDefault
z drugiej strony na pewno zapobiegnie tylko domyślnemu zachowaniu elementu.źródło
Myślę
event.preventDefault()
to określony przez w3c sposób anulowania zdarzeń.
Możesz to przeczytać w specyfikacji W3C w sprawie anulowania zdarzeń .
Nie możesz również użyć return false w każdej sytuacji. Podając funkcję javascript w atrybucie href i jeśli zwrócisz false, użytkownik zostanie przekierowany na stronę z zapisanym fałszywym łańcuchem.
źródło
<a href="javascript:return false"
czymś?Myślę, że najlepszym sposobem na to jest użycie,
event.preventDefault()
ponieważ jeśli w module obsługi zostanie zgłoszony jakiś wyjątek, wówczas jest to returnfalse
zostanie pominięta, a zachowanie będzie przeciwne do tego, co chcesz.Ale jeśli masz pewność, że kod nie wyzwoli żadnych wyjątków, możesz zastosować dowolną metodę.
Jeśli nadal chcesz przejść ze zwrotem
false
, możesz umieścić cały kod modułu obsługi w bloku try catch, jak poniżej:źródło
Z mojego doświadczenia wynika, że zawsze lepiej jest używać
Praktycznie, aby zatrzymać lub uniemożliwić przesłanie zdarzenia, ilekroć jest to wymagane, a nie
return false
event.preventDefault()
działa dobrze.źródło
preventDefault
to angielskie słowo, które rozumiem „zapobiega domyślnemu”.return false
to angielskie słowa. Rozumiem, że „zwraca fałsz”, ale nie mam pojęcia, dlaczego, dopóki nie opublikuję tego tajemniczego kodu w Google. I bonus, mogę kontrolować osobnostopPropagation
ipreventDefault
.Główna różnica między
return false
ievent.preventDefault()
polega na tym, że poniższy kodreturn false
nie zostanie wykonany, aevent.preventDefault()
jeśli kod zostanie wykonany po tej instrukcji.Kiedy piszesz return false, wykonaj następujące czynności za kulisami.
źródło
e.preventDefault ();
Po prostu zatrzymuje domyślną akcję elementu.
uniemożliwia śledzenie hiperłącza za pomocą adresu URL, uniemożliwia przycisk przesłania formularza. Jeśli masz wiele programów obsługi zdarzeń i chcesz po prostu zapobiec wystąpieniu zdarzenia domyślnego i występowaniu go wiele razy, w tym celu musimy użyć górnej części funkcji ().
Powodem użycia
e.preventDefault();
jest to, że w naszym kodzie coś jest nie tak z kodem, to pozwoli na wykonanie linku lub formularza w celu przesłania lub pozwoli na wykonanie lub zezwolenie na cokolwiek, co musisz zrobić. & link lub przycisk Prześlij zostanie przesłany i nadal pozwoli na dalsze rozpowszechnianie wydarzenia.zwrócić False;
Po prostu zatrzymuje wykonywanie funkcji ().
„
return false;
” zakończy wykonywanie całego procesu.Powód użycia return false; jest to, że nie chcesz już wykonywać tej funkcji w trybie ścisłym.
źródło
Zasadniczo w ten sposób łączysz rzeczy, ponieważ jQuery jest strukturą, która skupia się głównie na elementach HTML, w zasadzie zapobiegasz domyślnemu, ale jednocześnie przestajesz propagować, aby się rozwinąć.
Możemy więc po prostu powiedzieć, że wartość false
jQuery
jest równa:return false to e.preventDefault AND e.stopPropagation
Ale nie zapominaj również, że wszystko jest w funkcjach związanych z jQuery lub DOM, kiedy uruchamiasz go na elemencie, w zasadzie uniemożliwia to uruchomienie wszystkiego, w tym domyślne zachowanie i propagację zdarzenia.
Zasadniczo przed użyciem
return false;
należy najpierw zrozumieć, co zrobiće.preventDefault();
ie.stopPropagation();
zrobić, a następnie, jeśli uważasz, że potrzebujesz obu w tym samym czasie, po prostu użyj go.Więc w zasadzie ten kod poniżej:
jest równy temu kodowi:
źródło
Z mojego doświadczenia wynika, że event.stopPropagation () jest używany głównie w efektach CSS lub w pracach animacyjnych, na przykład gdy masz efekt najechania na element karty i przycisku, kiedy najedziesz na przycisk, efekt aktywacji karty i przycisku zostanie w tym przypadku wywołany , możesz użyć event.stopPropagation () do zatrzymania propagacji akcji, a event.preventDefault () służy do zapobiegania domyślnemu zachowaniu akcji przeglądarki. Na przykład masz formularz, ale zdefiniowałeś tylko zdarzenie kliknięcia dla akcji wysyłania, jeśli użytkownik prześle formularz naciskając Enter, przeglądarka wywoływana zdarzeniem naciśnięcia klawisza, a nie zdarzenie kliknięcia tutaj, powinieneś użyć event.preventDefault (), aby uniknąć niewłaściwego zachowanie. Nie wiem, co to do diabła, jest fałszywe; przepraszam. Aby uzyskać więcej wyjaśnień, odwiedź ten link i pobaw się z linią 33https://www.codecademy.com/courses/introduction-to-javascript/lessons/requests-i/exercises/xhr-get-request-iv
źródło