Kiedy i dlaczego „zwracać fałsz” w JavaScript?

137

Kiedy i dlaczego return falsew JavaScript?

zsharp
źródło

Odpowiedzi:

88

Często w programach obsługi zdarzeń, takich jak onsubmitzwracanie wartości false, jest sposobem na poinformowanie zdarzenia, aby faktycznie nie było uruchamiane. Powiedzmy, że w tym onsubmitprzypadku oznaczałoby to, że formularz nie został przesłany.

Chris Jester-Young
źródło
10
Jest to szczególnie przydatne, jeśli potrzebujesz formularza AJAX, który przesyła się bez ponownego ładowania strony - ale działa również poprzez przesyłanie i ponowne ładowanie strony, gdy JavaScript nie jest dostępny.
Dean Rather
10
Zwrot false jest w rzeczywistości przesadą w zapobieganiu domyślnej akcji podczas tworzenia programów obsługi zdarzeń i może prowadzić do kruchego kodu. Wyjaśnienie i przykłady w poście Douglasa Neinera tutaj fuelyourcoding.com/jquery-events-stop-misusing-return-false
Marquis Wang
3
Dzięki jQuery lepiej jest używać event.preventDefault()tej funkcji. Uważam, że zwracanie fałszu jest przestarzałe i nie zawsze już działa.
onetwopunch
1
Czasami return falsejest w metodzie, czy to coś zmienia?
Francisco Corrales Morales
@onetwopunch W rzeczywistości, kiedy zmieniłem go na e.preventDefault (), rozwiązałem problem z jedną z moich funkcji opartą na zdarzeniu dotykowym przestrzeni nazw. Nie wiem dlaczego, ale dałeś mi pomysł. Dzięki.
Garavani
69

Domyślam się, że masz na myśli fakt, że często musisz wstawić „return false”; instrukcja w programach obsługi zdarzeń, tj

<a href="#" onclick="doSomeFunction(); return false;">...

Polecenie „return false”; w tym przypadku zatrzymuje przeglądarkę przed skokiem do bieżącej lokalizacji, na co wskazuje href = "#" - zamiast tego wykonywana jest tylko funkcja doSomeFunction (). Jest to przydatne, gdy chcesz dodać zdarzenia do tagów kotwicy, ale nie chcesz, aby przeglądarka przeskakiwała w górę iw dół do każdej kotwicy po każdym kliknięciu

matowe
źródło
3
Oczywiście, 'href = "#"' jest złą praktyką, ale twój ogólny punkt jest nadal aktualny :-)
Bobby Jack,
4
@ vol7ron: alternatywą jest prawdziwy adres URL, który działa jako alternatywa dla osób bez javascript. W przeciwnym razie po prostu klikną link i nic się nie stanie.
Bobby Jack
3
@ vol7ron: oczywiście każdy deweloper (lub właściciel witryny) musi dokładnie określić, jaką część potencjalnej bazy użytkowników chce obsłużyć. Jednak w takim przypadku, w którym opcja skierowana do większej liczby osób jest TAK prosta, nie rozumiem, dlaczego nie zdecydowałbyś się na nią. Pamiętaj też, że nie chodzi tylko o to, aby ludzie wyraźnie wyłączali javascript; może to być: ktoś inny narzuca im tę decyzję, problem z siecią podczas pobierania pliku JS, błąd w jednej linii JS powodujący niepowodzenie. Poza tym jest całkiem fajnie, jeśli kliknięcie prawym przyciskiem myszy -> Otwórz w nowej karcie nadal działa.
Bobby Jack
To nie mniej niż 1% użytkowników. Wiele osób nie bez powodu używa rozszerzeń takich jak NoScript. Aby celowo wyłączyć takie rzeczy, jak javascript.
Sepero
@ vol7ron Innym scenariuszem do rozważenia jest „awaria javascript” (z powodu błędu składni w górnej części strony). Posiadanie awaryjnych innych niż js daje pewne siatki bezpieczeństwa dla tego scenariusza. (Google.com nie działał przez prawie 30 minut z powodu błędu składni js!)
Alex Czarto
28

Służy do zatrzymania propagacji zdarzenia . Widzisz, gdy masz dwa elementy, oba z obsługą zdarzenia kliknięcia (na przykład)

-----------------------------------
| element1                        |
|   -------------------------     |
|   |element2               |     |
|   -------------------------     |
|                                 |
-----------------------------------

Kliknięcie elementu wewnętrznego (element2) wywoła zdarzenie kliknięcia w obu elementach: 1 i 2. Nazywa się to „propagacją zdarzeń”. Jeśli chcesz obsłużyć zdarzenie tylko w elemencie 2, program obsługi zdarzenia musi zwrócić wartość false, aby zatrzymać propagację zdarzenia.

Innym przykładem będzie program obsługi linków onclick. Jeśli chcesz zatrzymać działanie formularza linku. Możesz dodać moduł obsługi onclick i zwrócić false. Aby zatrzymać propagację zdarzenia do domyślnej procedury obsługi.

Nadia Alramli
źródło
9
pierwsza część tej odpowiedzi jest błędna: powrót falsez procedury obsługi zdarzenia uniemożliwi wykonanie domyślnej akcji związanej ze zdarzeniem; możesz to również zrobić, dzwoniąc event.preventDefault()lub ustawiając event.returnValue = false(IE); aby zapobiec bulgotaniu wydarzenia, musisz zadzwonić event.stopPropagation()lub ustawić event.cancelBubble = true(IE)
Christoph
18

Eee ... co powiesz na funkcję logiczną, która wskaże „nieprawda”?

Bobby Jack
źródło
4
co z FileNotFound?
nickf
Nawet w FileNotFound fałsz nadal nie jest prawdą, prawda?
Gleb
2
Gleb: Nie ma „w FileNotFound”, to żart TDWTF: thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx
Chris Jester-Young
12

Trafiłem też na tę stronę po wyszukaniu „js, kiedy użyć 'return false'; Wśród innych wyników wyszukiwania była strona, którą uważam za znacznie bardziej użyteczną i prostszą, w witrynie CSS-Tricks Chrisa Coyiera: Różnica między „return false”; i 'e.preventDefault ();'

Istota jego artykułu brzmi:

function () {return false; }

// JEST RÓWNE

function (e) {e.preventDefault (); e.stopPropagation (); }

chociaż nadal polecałbym przeczytanie całego artykułu.

Aktualizacja: Po omówieniu zalet używania funkcji return false; jako zamiennik dla e.preventDefault (); & e.stopPropagation (); jeden z moich współpracowników wskazał, że return false zatrzymuje również wykonywanie wywołań zwrotnych, jak opisano w tym artykule: jQuery Events: Stop (Mis) Using Return False .

latanie
źródło
Muszę tu zauważyć po pewnym badaniu kodu, że: w jQuery , function() { return false; }jest równa function(e) { e.preventDefault(); e.stopPropagation(); }, ale w czystym js, to nie to samo, function() { return false; }JEST RÓWNA function(e) { e.preventDefault(); }faktycznie. To nie zatrzymać rozprzestrzenianie.
SkuraZZ
6

Podczas korzystania z eachfunkcji jQuery zwracanie wartości true lub false ma znaczenie. Zobacz doc

geowa4
źródło
3

Myślę, że lepszym pytaniem jest, dlaczego w przypadku, gdy oceniasz boolowski zbiór wartości zwracanych, czy NIE użyłbyś prawda / fałsz ? To znaczy, prawdopodobnie mógłbyś mieć true / null, true / -1, inne różne. Wartości „fałszywe” JavaScript do zastąpienia, ale dlaczego miałbyś to zrobić?

Frank Rosario
źródło
1

Jeśli chcesz wyzwolić kod javascript ze znacznika kotwicy, użyj funkcji obsługi onclick zamiast javascript: pseudo-protokół. Kod javascript, który działa w ramach procedury obsługi onclick, musi zwracać wartość true lub false (lub wyrażenie, które daje wartość true lub false) z powrotem do samego tagu - jeśli zwróci wartość true, to po HREF kotwicy będzie śledzony jak zwykły link. Jeśli zwróci fałsz, to HREF zostanie zignorowany. Dlatego właśnie „zwraca fałsz”; jest często dołączany na końcu kodu w module obsługi onclick.

Jamna
źródło
1

Używasz funkcji return false, aby zapobiec wystąpieniu zdarzenia. Więc jeśli masz skrypt działający podczas przesyłania, to zwrócenie false uniemożliwi działanie przesyłania.

rhysclay
źródło
1

Gdy w funkcji wywoływana jest instrukcja return, wykonywanie tej funkcji jest zatrzymywane. Jeśli jest określony, dana wartość jest zwracana do obiektu wywołującego funkcję. Jeśli wyrażenie zostanie pominięte, zamiast tego zwracany jest undefined.

Aby uzyskać więcej informacji, zajrzyj na stronę z dokumentacją MDN dotyczącąreturn .

habibun
źródło
1

zwróć false używając tylko jeśli masz jakieś działanie w funkcji (przez jakiś test) lub chcesz zatrzymać jakąś funkcję, na przykład użyj return false na końcu "onsubmit"

Abdul Aziz Al Basyir
źródło
1

Również ten krótki i interesujący link do przeczytania https://www.w3schools.com/jsref/event_preventdefault.asp

Definicja i użycie

Metoda prevDefault () anuluje zdarzenie, jeśli można je anulować, co oznacza, że ​​domyślna akcja należąca do zdarzenia nie zostanie wykonana.

Na przykład może to być przydatne, gdy:

Clicking on a "Submit" button, prevent it from submitting a form
Clicking on a link, prevent the link from following the URL

Uwaga: nie wszystkie wydarzenia można anulować. Użyj właściwości cancellable, aby dowiedzieć się, czy wydarzenie można anulować.

Uwaga: Metoda prevDefault () nie zapobiega dalszemu propagowaniu zdarzenia przez DOM. W tym celu użyj metody stopPropagation ().

jet2016
źródło
Rozważ użycie: developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault zamiast w3schools. Ale solidna odpowiedź.
Bibberty