Wann und warum sollte in JavaScript "false" zurückgegeben werden?

137

Wann und warum return falsein JavaScript?

zsharp
quelle

Antworten:

88

In Ereignishandlern wie der onsubmitRückgabe von false ist dies häufig eine Möglichkeit, dem Ereignis mitzuteilen, dass es nicht tatsächlich ausgelöst werden soll. In diesem onsubmitFall würde dies bedeuten, dass das Formular nicht gesendet wird.

Chris Jester-Young
quelle
10
Dies ist besonders gut, wenn Sie ein AJAX-Formular wünschen, das ohne erneutes Laden der Seite gesendet wird. Es funktioniert jedoch auch durch Senden und erneutes Laden der Seite, wenn kein Javascript verfügbar ist.
Dean Rather
10
Return false ist eigentlich ein Overkill, um die Standardaktion beim Erstellen von Ereignishandlern zu verhindern, und kann zu fragilem Code führen. Erklärung und Beispiele auf Douglas Neiners Beitrag hier fuelyourcoding.com/jquery-events-stop-misusing-return-false
Marquis Wang
3
Mit jQuery ist es besser, event.preventDefault()diese Funktionalität zu verwenden. Ich glaube, die Rückgabe von false ist veraltet und funktioniert nicht mehr immer.
Onetwopunch
1
Manchmal return falseist das in der Methode, ändert dies etwas?
Francisco Corrales Morales
@onetwopunch Als ich es in e.preventDefault () änderte, löste es ein Problem mit einer meiner Funktionen, das auf einem Namespace-Touch-Ereignis basierte. Ich weiß nicht warum, aber du hast mir die Idee gegeben. Vielen Dank.
Garavani
69

Ich vermute, dass Sie sich auf die Tatsache beziehen, dass Sie oft eine "falsche Rückgabe" setzen müssen; Aussage in Ihren Event-Handlern, dh

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

Die 'return false;' In diesem Fall kann der Browser nicht zum aktuellen Speicherort springen, wie durch href = "#" angegeben. Stattdessen wird nur doSomeFunction () ausgeführt. Dies ist nützlich, wenn Sie Ankertags Ereignisse hinzufügen möchten, der Browser jedoch nicht bei jedem Klick zu jedem Anker auf und ab springen soll

matt
quelle
3
Natürlich ist das 'href = "#"' eine schlechte Übung, aber Ihr Gesamtpunkt bleibt bestehen :-)
Bobby Jack
4
@ vol7ron: Die Alternative ist eine echte URL, die als Alternative für Personen ohne Javascript dient. Andernfalls klicken sie einfach auf einen Link, ohne dass etwas passiert.
Bobby Jack
3
@ vol7ron: Natürlich muss jeder Entwickler (oder Websitebesitzer) genau bestimmen, wie viel von der potenziellen Benutzerbasis er bedienen möchte. In einem Fall wie diesem, in dem die Option, die mehr Menschen anspricht, so einfach ist, verstehe ich nicht, warum Sie sich nicht dafür entscheiden würden. Denken Sie auch daran, dass es nicht nur darum geht, Javascript explizit zu deaktivieren. Es kann sein: jemand anderes, der ihnen diese Entscheidung auferlegt, ein Netzwerkproblem beim Herunterladen der JS-Datei, ein Fehler in einer Zeile des JS, der dazu führt, dass alles fehlschlägt. Es ist auch sehr schön, wenn Rechtsklick-> In neuem Tab öffnen immer noch funktioniert.
Bobby Jack
Es ist nicht weniger als 1% der Benutzer. Viele Leute verwenden Erweiterungen wie NoScript aus einem bestimmten Grund. Dinge wie Javascript absichtlich ausschalten.
Sepero
@ vol7ron Das andere zu berücksichtigende Szenario ist, wenn "Javascript bricht" (aufgrund eines Syntaxfehlers weiter oben auf der Seite). Wenn Sie nicht js-Fallbacks haben, erhalten Sie einige Sicherheitsnetze für dieses Szenario. (Google.com war vor einiger Zeit wegen eines js-Syntaxfehlers fast 30 Minuten lang nicht erreichbar!)
Alex Czarto
28

Es wird verwendet, um die Ausbreitung des Ereignisses zu stoppen . Sie sehen, wenn Sie zwei Elemente mit einem Klickereignishandler haben (zum Beispiel)

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

Wenn Sie auf das innere Element (Element2) klicken, wird in beiden Elementen ein Klickereignis ausgelöst: 1 und 2. Es wird als "Ereignisblasen" bezeichnet. Wenn Sie das Ereignis nur in Element2 behandeln möchten, muss der Ereignishandler false zurückgeben, um die Ereignisausbreitung zu stoppen.

Ein weiteres Beispiel ist der Link-On-Click-Handler. Wenn Sie verhindern möchten, dass ein Linkformular funktioniert. Sie können einen Onclick-Handler hinzufügen und false zurückgeben. So verhindern Sie, dass das Ereignis an den Standardhandler weitergegeben wird.

Nadia Alramli
quelle
9
Der erste Teil dieser Antwort ist falsch: Wenn Sie falsevon einem Ereignishandler zurückkehren, wird die mit einem Ereignis verknüpfte Standardaktion verhindert. Sie können dies auch über einen Aufruf event.preventDefault()oder eine Einstellung event.returnValue = false(IE) tun . Um zu verhindern, dass das Ereignis sprudelt, müssen Sie anrufen event.stopPropagation()oder einstellen event.cancelBubble = true(IE)
Christoph
18

Äh ... wie wäre es mit einer booleschen Funktion, um "nicht wahr" anzuzeigen?

Bobby Jack
quelle
4
Was ist mit FileNotFound?
Nickf
Selbst in FileNotFound ist false immer noch nicht wahr, nicht wahr?
Gleb
2
Gleb: Es gibt kein "in FileNotFound", es ist ein TDWTF-Scherz: thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx
Chris Jester-Young
12

Ich bin auch auf diese Seite gekommen, nachdem ich nach "js" gesucht habe, wenn ich "return false" verwenden soll. Unter den anderen Suchergebnissen befand sich eine Seite, die ich auf Chris Coyiers CSS-Tricks-Website weitaus nützlicher und unkomplizierter fand: Der Unterschied zwischen 'return false;' und 'e.preventDefault ();'

Der Kern seines Artikels ist:

function () {return false; }}

// ENTSPRICHT

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

obwohl ich trotzdem empfehlen würde, den ganzen Artikel zu lesen.

Update: Nachdem die Vorteile der Verwendung von return false diskutiert wurden; als Ersatz für e.preventDefault (); & e.stopPropagation (); Einer meiner Mitarbeiter wies darauf hin, dass return false auch die Ausführung von Rückrufen stoppt, wie in diesem Artikel beschrieben: jQuery-Ereignisse: Stop (Mis) Using Return False .

Flyingace
quelle
Ich habe hier nach einigem Code - Test zu bemerken , dass: in jquery , function() { return false; }GLEICH function(e) { e.preventDefault(); e.stopPropagation(); }, aber in rein js, es ist nicht die gleiche, function() { return false; }GLEICH function(e) { e.preventDefault(); }tatsächlich. Es stoppt nicht die Ausbreitung.
SkuraZZ
6

Wenn Sie die eachFunktion von jQuery verwenden, hat die Rückgabe von true oder false eine Bedeutung. Siehe das Dokument

geowa4
quelle
3

Ich denke, eine bessere Frage ist, warum Sie in einem Fall, in dem Sie einen booleschen Satz von Rückgabewerten auswerten, NICHT true / false verwenden würden . Ich meine, Sie könnten wahrscheinlich true / null, true / -1, andere Verschiedenes haben. Javascript "falsche" Werte zu ersetzen, aber warum sollten Sie das tun?

Frank Rosario
quelle
1

Wenn Sie Javascript-Code von einem Ankertag aus auslösen möchten, sollte der Onclick-Handler anstelle des Javascript: Pseudo-Protokolls verwendet werden. Der im Onclick-Handler ausgeführte Javascript-Code muss true oder false (oder einen Ausdruck, der auf true oder false ausgewertet wird) an das Tag selbst zurückgeben. Wenn er true zurückgibt, wird die HREF des Ankers wie ein normaler Link verfolgt. Wenn false zurückgegeben wird, wird der HREF ignoriert. Deshalb "return false"; wird häufig am Ende des Codes in einem Onclick-Handler eingefügt.

Jamna
quelle
1

Sie verwenden return false, um zu verhindern, dass etwas passiert. Wenn also ein Skript beim Senden ausgeführt wird, verhindert die Rückgabe von false, dass das Senden funktioniert.

Rhysclay
quelle
1

Wenn eine return-Anweisung in einer Funktion aufgerufen wird, wird die Ausführung dieser Funktion gestoppt. Wenn angegeben, wird ein bestimmter Wert an den Funktionsaufrufer zurückgegeben. Wenn der Ausdruck weggelassen wird, wird stattdessen undefined zurückgegeben.

Weitere Informationen finden Sie auf der MDN-Dokumentenseite fürreturn .

Habibun
quelle
1

Geben Sie false nur mit zurück, wenn Sie eine abgenutzte Funktion haben (durch einen Test) oder wenn Sie eine Funktion stoppen möchten. Verwenden Sie beispielsweise return false am Ende "onsubmit".

Abdul Aziz Al Basyir
quelle
1

Auch dieser kurze und interessante Link zum Durchlesen https://www.w3schools.com/jsref/event_preventdefault.asp

Definition und Verwendung

Die Methode prepareDefault () bricht das Ereignis ab, wenn es abgebrochen werden kann. Dies bedeutet, dass die zum Ereignis gehörende Standardaktion nicht ausgeführt wird.

Dies kann beispielsweise nützlich sein, wenn:

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

Hinweis: Nicht alle Ereignisse können abgebrochen werden. Verwenden Sie die Eigenschaft cancelable, um herauszufinden, ob ein Ereignis stornierbar ist.

Hinweis: Die Methode präventDefault () verhindert nicht die weitere Weitergabe eines Ereignisses durch das DOM. Verwenden Sie dazu die stopPropagation () -Methode.

jet2016
quelle
Erwägen Sie die Verwendung von: developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault im Gegensatz zu w3schools. Aber solide Antwort.
Bibberty