Oft habe ich solche Links auf HTML-Seiten gesehen:
<a href='#' onclick='someFunc(3.1415926); return false;'>Click here !</a>
Was bewirkt das return false
da drin?
Außerdem sehe ich das normalerweise nicht in Schaltflächen.
Ist das irgendwo angegeben? In einer Spezifikation in w3.org?
javascript
html
Leonel
quelle
quelle
Antworten:
Der Rückgabewert eines Ereignishandlers bestimmt, ob das Standardverhalten des Browsers ebenfalls stattfinden soll oder nicht. Wenn Sie auf Links klicken, folgt dies dem Link. Der Unterschied macht sich jedoch am deutlichsten bei den Formularübermittlungshandlern bemerkbar, bei denen Sie eine Formularübermittlung abbrechen können, wenn der Benutzer einen Fehler bei der Eingabe der Informationen gemacht hat.
Ich glaube nicht, dass es dafür eine W3C-Spezifikation gibt. Alle alten JavaScript-Schnittstellen wie diese haben den Spitznamen "DOM 0" erhalten und sind größtenteils nicht spezifiziert. Möglicherweise haben Sie etwas Glück beim Lesen der alten Netscape 2-Dokumentation.
Der moderne Weg, um diesen Effekt zu erzielen, ist das Aufrufen
event.preventDefault()
. Dies wird in der DOM 2-Ereignisspezifikation angegeben .quelle
event.preventDefault ? event.preventDefault() : event.returnValue = false;
wird auch im IEreturn false
Methode, aber ich brauchteevent.preventDefault
für Chrome.return false
jetzt mit der Methode. Es hört auf, dem Link im Ereignis onclick eines img-Elements zu folgen.Sie können den Unterschied anhand des folgenden Beispiels erkennen:
Wenn Sie auf "Okay" klicken, wird true zurückgegeben, und der Link wird befolgt. Wenn Sie auf "Abbrechen" klicken, wird false zurückgegeben und der Verknüpfung folgt nicht. Wenn Javascript deaktiviert ist, wird dem Link normal gefolgt.
quelle
<button type="submit" onclick="return confirm('Do you really want to delete this?');">Delete</button>
Hier ist eine robustere Routine, um das Standardverhalten und das Sprudeln von Ereignissen in allen Browsern abzubrechen:
Ein Beispiel, wie dies in einem Ereignishandler verwendet werden würde:
quelle
return false;
? Kameshs Antwort befasst sich ein wenig damit, aber da es eine Chance gibt, dass Ihr Shim das eine oder andere tut, wie werden diese getrennten Ergebnisse dentabstripLinkElement_click
Änderungsvorgang von Browser zu Browser bewirken? Wenn es keinen betrieblichen Unterschied gibt, warum (in der Praxis) die Mühe machen (auch wenn dies theoretisch das Richtige ist)? Danke und AIA für die Zombie-Antwortfrage.else
. Schrecklicher Codierungsstil. Fügen Sie einige geschweifte Klammern hinzu, damit es nicht mehrdeutig ist.WAS TUT "return false" WIRKLICH?
return false macht tatsächlich drei sehr unterschiedliche Dinge, wenn Sie es nennen:
Weitere Informationen finden Sie unter jquery-events-stop-misusing-return-false .
Beispielsweise :
Wenn Sie auf diesen Link klicken, wird durch Rückgabe von false das Standardverhalten des Browsers abgebrochen .
quelle
e.preventDefault()
), stoppen jedoch nicht die Weitergabe. Siehe: jsfiddle.net/18yq1783Durch die erneute Abstimmung von false aus einem JavaScript-Ereignis wird normalerweise das "Standard" -Verhalten aufgehoben. Bei Links wird der Browser angewiesen, dem Link nicht zu folgen.
quelle
Ich glaube, es führt dazu, dass das Standardereignis nicht eintritt.
In Ihrem Beispiel versucht der Browser nicht, zu # zu wechseln.
quelle
Return false verhindert, dass der Hyperlink nach dem Ausführen von Javascript verfolgt wird. Dies ist nützlich für unauffälliges Javascript, das sich elegant verschlechtert. Sie könnten beispielsweise ein Miniaturbild haben, das Javascript verwendet, um ein Popup des Bildes in voller Größe zu öffnen. Wenn Javascript deaktiviert oder das Bild mit der mittleren Maustaste angeklickt wird (in einem neuen Tab geöffnet), wird das Ereignis onClick ignoriert und das Bild wird normalerweise nur als Bild in voller Größe geöffnet.
Wenn return false nicht angegeben würde, würde das Bild sowohl das Popup starten als auch das Bild normal öffnen. Einige Leute verwenden anstelle von return false Javascript als href-Attribut. Dies bedeutet jedoch, dass der Link nichts tut, wenn Javascript deaktiviert ist.
quelle
Die Verwendung von return false in einem Onclick-Ereignis verhindert, dass der Browser den Rest des Ausführungsstapels verarbeitet, einschließlich des Verfolgens des Links im href-Attribut.
Mit anderen Worten, das Hinzufügen von return false verhindert, dass die href funktioniert. In Ihrem Beispiel ist dies genau das, was Sie wollen.
In Schaltflächen ist dies nicht erforderlich, da nur ein Klick ausgeführt wird - es gibt keine href, die verarbeitet und aufgerufen werden kann.
quelle
Die Rückgabe false besagt, dass die Standardaktion nicht ausgeführt werden soll, die im Fall von a
<a href>
dem Link folgen soll. Wenn Sie beim Onclick false zurückgeben, wird die href ignoriert.quelle
Browser-Hack: http://jszen.blogspot.com/2007/03/return-false-to-prevent-jumping.html
quelle
Die Rückgabe false verhindert die Navigation. Andernfalls würde der Speicherort zum Rückgabewert von someFunc
quelle
Die
return false
verhindert , dass die Seite von navigiert wird und unerwünschte Scrollen eines Fensters nach oben oder unten.quelle
Ich bin überrascht, dass niemand
onmousedown
statt erwähnt hatonclick
. Dasonclick='return false'
fängt das Standardverhalten des Browsers nicht ab, was zu einer (manchmal unerwünschten) Textauswahl für
mousedown
aber führtonmousedown='return false'
tut.
Mit anderen Worten, wenn ich auf eine Schaltfläche klicke, wird deren Text manchmal versehentlich ausgewählt, wodurch sich das Aussehen der Schaltfläche ändert, was möglicherweise unerwünscht ist. Dies ist das Standardverhalten, das wir hier verhindern möchten. Das
mousedown
Ereignis wurde jedoch bereits zuvor registriert.click
Wenn Sie dieses Verhalten nur in Ihremclick
Handler verhindern, hat dies keine Auswirkungen auf die unerwünschte Auswahl, die sich aus demmousedown
Ereignis ergibt . Der Text wird also weiterhin ausgewählt. Wenn Sie jedoch die Standardeinstellung für dasmousedown
Ereignis verhindern, wird der Job ausgeführt.Siehe auch event.preventDefault () vs. return false
quelle
Ich habe diesen Link auf meiner HTML-Seite:
Die Funktion setBodyHtml () ist definiert als:
Wenn ich auf den Link klicke, verschwindet der Link und der im Browser angezeigte Text ändert sich in "neuer Inhalt".
Aber wenn ich das "Falsche" aus meinem Link entferne, bewirkt das Klicken auf den Link (scheinbar) nichts. Warum ist das so?
Dies liegt daran, dass das Standardverhalten beim Klicken auf den Link und beim Anzeigen der Zielseite nicht abgebrochen wird, wenn ich nicht false zurückgebe. ABER hier ist der href des Hyperlinks "", sodass er auf die gleiche aktuelle Seite zurückführt. Die Seite wird also effektiv nur aktualisiert und anscheinend passiert nichts.
Im Hintergrund wird die Funktion setBodyHtml () weiterhin ausgeführt. Es weist sein Argument body.innerHTML zu. Da die Seite jedoch sofort aktualisiert / neu geladen wird, bleibt der geänderte Textinhalt möglicherweise nicht länger als ein paar Millisekunden sichtbar, sodass ich ihn nicht sehen werde.
Dieses Beispiel zeigt, warum es manchmal NÜTZLICH ist, "return false" zu verwenden.
Ich möchte dem Link SOME href zuweisen, damit er als Link als unterstrichener Text angezeigt wird. Ich möchte jedoch nicht, dass durch Klicken auf den Link die Seite effektiv neu geladen wird. Ich möchte, dass das Standardverhalten von Navigation = aufgehoben wird und alle Nebenwirkungen, die durch den Aufruf meiner Funktion verursacht werden, wirksam werden. Deshalb muss ich "false zurückgeben".
Das obige Beispiel würden Sie während der Entwicklung schnell ausprobieren. Für die Produktion würden Sie eher einen Click-Handler in JavaScript zuweisen und stattdessen verhindernDefault () aufrufen. Aber für ein schnelles Ausprobieren reicht die obige "return false" aus.
quelle
Bei Verwendung von Formularen , können wir 'return false' verwenden, um das Senden zu verhindern.
quelle