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, jak event.preventDefault().

  • Jeśli Obsługa zdarzenia została dodana za pomocą addEventListener, na przykład

    elem.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ł.

Author: Community, 2013-09-24

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.

 50
Author: Thorben Bochenek,
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

Tabela Pokazująca Różnicę

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.

 -1
Author: Rahul Shinde,
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

 -12
Author: ppy,
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