424 Stimmen

Was bewirkt das Hinzufügen von "return false" zu einem Click-Event-Listener?

Solche Links habe ich schon oft in HTML-Seiten gesehen:

<a href='#' onclick='someFunc(3.1415926); return false;'>Click here !</a>

Welche Auswirkungen hat die return false da drin?

Außerdem sehe ich das normalerweise nicht bei Knöpfen.

Ist dies irgendwo angegeben? In einer Spezifikation von w3.org?

6 Stimmen

Und das praktische Problem in Leonels Beispiel ist, dass, wenn die aktuelle Seite irgendwie nach unten gescrollt wird, sie nach oben springt, ohne dass der Return false;

0 Stimmen

Mein IntelliJ beschwert sich bei "return false;" mit der Meldung "außerhalb der Funktionsdefinition".

357voto

Jim Punkte 70896

Der Rückgabewert eines Ereignishandlers bestimmt, ob das Standardverhalten des Browsers übernommen werden soll oder nicht. Im Falle des Anklickens von Links wäre dies das Verfolgen des Links, aber der Unterschied ist am deutlichsten bei Handlern für das Absenden von Formularen, wo Sie das Absenden eines Formulars 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 meist nicht spezifiziert. Vielleicht haben Sie Glück, wenn Sie die alte Netscape-2-Dokumentation lesen.

Die moderne Art, diesen Effekt zu erzielen, ist der Aufruf event.preventDefault() und dies ist festgelegt in die DOM 2 Events Spezifikation .

46 Stimmen

event.preventDefault ? event.preventDefault() : event.returnValue = false; funktioniert auch im IE

4 Stimmen

Jeder Browser außer Chrome arbeitete mit dem return false Methode, aber ich brauchte event.preventDefault für Chrome.

5 Stimmen

Chrome arbeitet mit dem return false Methode jetzt. Sie folgt nicht mehr dem Link im onclick-Ereignis eines img-Elements.

183voto

HoboBen Punkte 3371

Sie können den Unterschied anhand des folgenden Beispiels sehen:

<a href="http://www.google.co.uk/" onclick="return (confirm('Follow this link?'))">Google</a>

Wenn Sie auf "OK" klicken, wird "true" zurückgegeben, und der Link wird verfolgt. Wenn Sie auf "Abbrechen" klicken, wird "false" zurückgegeben, und der Link wird nicht weiterverfolgt. Wenn Javascript deaktiviert ist, wird der Link normal weiterverfolgt.

9 Stimmen

Genau das, wonach ich gesucht habe, funktioniert auch perfekt auf Submit-Buttons! <button type="submit" onclick="return confirm('Do you really want to delete this?');">Delete</button>

32voto

kamesh Punkte 2275

WAS "return false" WIRKLICH TUT?

return false tut eigentlich drei sehr unterschiedliche Dinge, wenn Sie es aufrufen:

  1. event.preventDefault();
  2. event.stopPropagation();
  3. Stoppt die Ausführung des Rückrufs und kehrt sofort zurück, wenn er aufgerufen wird.

Siehe jquery-events-stop-misusing-return-false für weitere Informationen.

Zum Beispiel:

wenn Sie auf diesen Link klicken, wird false zurückgegeben das Standardverhalten des Browsers aufheben .

<a href='#' onclick='someFunc(3.1415926); return false;'>Click here !</a>

8 Stimmen

Onclick="return false" ist no dasselbe wie die Rückgabe von false aus einem jQuery-Klick-Event-Handler. Die Browser verhindern nur den Standard-Handler (z.B. e.preventDefault() ), stoppen aber nicht die Ausbreitung. Siehe: jsfiddle.net/18yq1783

1 Stimmen

Übrigens ist der Link zum Blog derzeit defekt. An Archiv ist hier .

1 Stimmen

Hier ist ein Link zu dem Blogbeitrag, der funktioniert, zumindest derzeit.

30voto

Herb Caudill Punkte 49603

Hier ist eine robustere Routine, um das Standardverhalten und die Ereignisblasenbildung in allen Browsern abzuschalten:

// Prevents event bubble up or any usage after this is called.
eventCancel = function (e)
{
    if (!e)
        if (window.event) e = window.event;
        else return;
    if (e.cancelBubble != null) e.cancelBubble = true;
    if (e.stopPropagation) e.stopPropagation();
    if (e.preventDefault) e.preventDefault();
    if (window.event) e.returnValue = false;
    if (e.cancel != null) e.cancel = true;
}

Ein Beispiel dafür, wie dies in einem Ereignis-Handler verwendet werden könnte:

// Handles the click event for each tab
Tabstrip.tabstripLinkElement_click = function (evt, context) 
{
    // Find the tabStrip element (we know it's the parent element of this link)
    var tabstripElement = this.parentNode;
    Tabstrip.showTabByLink(tabstripElement, this);
    return eventCancel(evt);
}

0 Stimmen

Eine Unterlegscheibe ist nett, aber was ist der praktische Vorteil gegenüber return false; ? kamesh's Antwort befasst sich ein wenig mit diesem Thema, aber da die Möglichkeit besteht, dass Ihre Unterlegscheibe das eine oder das andere tut, wie werden diese unterschiedlichen Ergebnisse zu tabstripLinkElement_click den Betrieb von Browser zu Browser ändern? Wenn es keinen Unterschied in der Bedienung gibt, warum sollte man sich dann (in der Praxis) die Mühe machen (auch wenn es theoretisch das Richtige ist, dies zu tun)? Vielen Dank, und AIA für die Zombie-Antwort Frage.

9 Stimmen

Der erste Codeblock hat ein nachgestelltes else . Schrecklicher Kodierungsstil. Fügen Sie einige geschweifte Klammern ein, damit es nicht zweideutig ist.

0 Stimmen

@DonaldDuck Bist du dir sicher mit dem Leerzeichen? Wenn ich versuche if (false) if (true) console.log('true'); else console.log('false1'); Ich bekomme undefined , nicht false1 . Wenn ich eine weitere Zeile hinzufüge: if (false) if (true) console.log('true'); else console.log('false1'); else console.log('false2'); Ich bekomme false2 . Das heißt, die anderen in else return gehört zu if (window.event) Glaube ich.

17voto

Neall Punkte 24968

Die Rückgabe von false bei einem JavaScript-Ereignis hebt in der Regel das "Standard"-Verhalten auf - im Falle von Links bedeutet dies, dass der Browser dem Link nicht folgen soll.

8 Stimmen

"normalerweise"? also nicht immer?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X