wydarzenie.preventDefault () vs. return false (no jQuery)
Zastanawiałem się, czy event.preventDefault()
i return false
były takie same.
Zrobiłem kilka testów i wydaje się, że
-
Jeśli Obsługa zdarzeń jest dodana przy użyciu starego modelu, na przykład
elem.onclick = function(){ return false; };
Następnie,
return false
zapobiega domyślnej akcji, jakevent.preventDefault()
. -
Jeśli Obsługa zdarzenia została dodana za pomocą
addEventListener
, na przykładelem.addEventListener( 'click', function(e){ return false; }, false );
Wtedy,
return false
nie zapobiega domyślnej akcji.
Czy wszystkie przeglądarki zachowują się jak to?
Czy jest więcej różnic między event.preventDefault()
i return false
?
Gdzie znajdę jakąś dokumentację (nie mogłem w MDN) o return false
zachowującą się jak event.preventDefault()
w niektórych przypadkach?
Moje pytanie dotyczy tylko zwykłego javascript, a nie jQuery, więc proszę nie oznaczyć go jako DUPLIKAT zdarzenia .preventDefault () vs. return false , nawet jeśli oba pytania mają prawie ten sam tytuł.
3 answers
Specyfikacja zdarzeń modelu obiektowego dokumentu W3C W 1.3.1. Interfejs rejestracji zdarzeń stwierdza, że handleEvent
W EventListener nie ma zwracanej wartości:
handleEvent
Metoda ta jest wywoływana zawsze, gdy wystąpi zdarzenie typu dla którego został zarejestrowany interfejs EventListener. [...No Return Wartość
Pod 1.2.4. Event Cancelation dokument stwierdza również, że
Anulowanie następuje przez wywołanie Preventdefault zdarzenia metoda. Jeśli jeden lub więcej EventListeners wywoła preventDefault podczas dowolnego Faza przepływu zdarzeń domyślna akcja zostanie anulowana.
, które powinny zniechęcić cię do używania jakiegokolwiek efektu, jaki zwrócenie true / false może mieć w dowolnej przeglądarce i użyciu event.preventDefault()
.
Update
Specyfikacja HTML5 określa, jak traktować wartość zwracaną inaczej. sekcja 7.1.5.1 specyfikacji HTML stwierdza, że
Jeśli zwracana wartość jest wartością logiczną webidl, następnie anuluj wydarzenie.
Za wszystko oprócz zdarzenia "mouseover".
Wniosek
Nadal polecam używać event.preventDefault()
w większości projektów, ponieważ będziesz kompatybilny ze starą specyfikacją, a więc ze starszymi przeglądarkami. Tylko jeśli potrzebujesz tylko obsługi najnowocześniejszych przeglądarek, zwracanie false do anulowania jest w porządku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-17 00:02:57
Różnica między preventDefault, stopPropogation, return false
Default Action-akcja po stronie serwera, gdy wywołane zostanie Zdarzenie sterujące.
Załóżmy, że mamy kontrolkę div I wewnątrz niej mamy przycisk. Tak więc div jest nadrzędną kontrolą przycisku. Mamy click po stronie klienta i click po stronie serwera Zdarzenie przycisku. Mamy również zdarzenie kliknięcia po stronie klienta div.
Po kliknięciu przycisku po stronie klienta możemy kontrolować działania sterowania nadrzędnego i Kod po stronie serwera używając następujących trzech sposobów:
return false
- Pozwala to tylko na zdarzenie po stronie klienta kontrolki. Nie jest wywoływane zdarzenie po stronie serwera i Zdarzenie po stronie klienta kontrolki nadrzędnej.preventDefault()
- pozwala to na wystąpienie po stronie klienta sterowania i jego sterowania nadrzędnego. Server side event czyli Domyślna akcja kontrolki nie jest wywoływana.stopPropogation()
– pozwala to na wystąpienie sterowania po stronie klienta oraz po stronie serwera. Zdarzenie po stronie klienta Kontrola nie jest dozwolona.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-20 15:03:20
return false
jest tylko dla IE, event.preventDefault()
jest wspierany przez chrome, ff... nowoczesne przeglądarki
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-24 01:01:19