3249 Stimmen

event.preventDefault() vs. return false

Wenn ich verhindern möchte, dass andere Ereignisbehandler nach dem Auslösen eines bestimmten Ereignisses ausgeführt werden, kann ich eine von zwei Techniken anwenden. In den Beispielen verwende ich jQuery, aber das gilt auch für einfache JS:

1. event.preventDefault()

$('a').click(function (e) {
    // custom handling here
    e.preventDefault();
});

2. return false

$('a').click(function () {
    // custom handling here
    return false;
});

Gibt es einen signifikanten Unterschied zwischen diesen beiden Methoden zum Stoppen der Ereignisausbreitung?

Für mich, return false; ist einfacher, kürzer und wahrscheinlich weniger fehleranfällig als die Ausführung einer Methode. Bei der Methode müssen Sie auf korrekte Groß- und Kleinschreibung, Klammern usw. achten.

Außerdem muss ich den ersten Parameter in callback definieren, um die Methode aufrufen zu können. Vielleicht gibt es einige Gründe, warum ich diese Vorgehensweise vermeiden und die Methode preventDefault stattdessen? Was ist der bessere Weg?

181 Stimmen

Beachten Sie, dass jQuery's preventDefault fait nicht andere Händer an der Ausführung zu hindern. Das ist es, was stopImmediatePropagation ist für.

19 Stimmen

@CrescentFresh, es verhindert, dass andere (anschließend gebundene) Handler ausgeführt werden... auf dem DOM-Knoten, auf dem das Ereignis ausgelöst wird. Es verhindert nur nicht die Weitergabe.

42 Stimmen

Es handelt sich nicht um "zwei Methoden zum Stoppen der Ereignisausbreitung?" e.preventDefault(); verhindert die Standardaktion, stoppt aber nicht die Ereignisausbreitung, die von e.stopPropagation() durchgeführt wird.

48voto

Eldar Djafarov Punkte 21419

Sie können eine Vielzahl von Funktionen an den onClick Ereignis für ein Element. Wie können Sie sicher sein, dass das false Wer wird als letzter schießen? preventDefault andererseits wird definitiv nur das Standardverhalten des Elements verhindert.

0 Stimmen

Sie müssen nicht zulassen, dass der letzte Event-Handler false zurückgibt. Jeder Handler kann false zurückgeben, um das Standardverhalten zu verhindern. Siehe myprogrammingnotes.com/

24voto

rahul Punkte 179143

Ich denke

event.preventDefault()

ist die von w3c vorgegebene Art, Ereignisse abzubrechen.

Sie können dies in der W3C-Spezifikation nachlesen unter Absage der Veranstaltung .

Außerdem kann man return false nicht in jeder Situation verwenden. Wenn Sie eine Javascript-Funktion im href-Attribut angeben und false zurückgeben, wird der Benutzer auf eine Seite mit falscher Zeichenfolge umgeleitet.

4 Stimmen

In keinem Browser, den ich kenne. Vielleicht verwechseln Sie das mit <a href="javascript:return false" oder so etwas?

14 Stimmen

-1; die Behauptung, dass eine href, die false zurückgibt, eine Textseite mit dem Wort "false" erzeugt, ist völliger Unsinn.

1 Stimmen

(minus)1; defekter Link + völliger Unsinn

19voto

Ich denke, der beste Weg, dies zu tun, ist die Verwendung von event.preventDefault() denn wenn im Handler eine Ausnahme ausgelöst wird, dann ist die Rückgabe false Anweisung wird übersprungen und das Verhalten ist das Gegenteil von dem, was Sie wollen.

Wenn Sie jedoch sicher sind, dass der Code keine Ausnahmen auslöst, können Sie jede beliebige Methode verwenden.

Wenn Sie immer noch mit der Rückgabe fortfahren möchten false dann können Sie Ihren gesamten Handler-Code in einen Try-Catch-Block wie unten einfügen:

$('a').click(function (e) {
  try{
      your code here.........
  }
   catch(e){}
  return false;
});

5voto

Abdullah Shoaib Punkte 388

Der Hauptunterschied zwischen return false y event.preventDefault() ist, dass Ihr Code unten return false wird nicht ausgeführt und in event.preventDefault() Fall wird Ihr Code nach dieser Anweisung ausgeführt.

Wenn Sie return false schreiben, werden hinter den Kulissen die folgenden Dinge für Sie erledigt.

* Stops callback execution and returns immediately when called.
* event.stopPropagation();
* event.preventDefault();

1voto

Parth Raval Punkte 3571

e.preventDefault();

Sie stoppt lediglich die Standardaktion eines Elements.

Beispiel:-

verhindert, dass der Hyperlink der URL folgt und dass die Schaltfläche "Submit" das Formular abschickt. Wenn Sie viele Event-Handler haben und Sie wollen nur verhindern, dass Standard-Ereignis aus auftreten, & Auftreten von vielen Zeiten, dafür müssen wir in der Spitze der Funktion() zu verwenden.

Grund:-

Der Grund für die Verwendung e.preventDefault(); ist, dass in unserem Code, so dass etwas falsch in den Code geht, dann wird es erlauben, den Link oder das Formular auszuführen, um eingereicht zu erhalten oder erlauben auszuführen oder erlauben, was auch immer Aktion, die Sie tun müssen. & Link oder Schaltfläche einreichen wird eingereicht & noch erlauben weitere Ausbreitung des Ereignisses.

<!DOCTYPE html>
<html lang="en" dir="ltr">
   <head>
      <meta charset="utf-8">
      <title></title>
   </head>
   <body>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
      <a href="https://www.google.com" onclick="doSomethingElse()">Preventsss page from redirect</a>
      <script type="text/javascript">
         function doSomethingElse(){
           console.log("This is Test...");
         }
         $("a").click(function(e){
          e.preventDefault(); 
         });
      </script>
   </body>
</html>

False zurückgeben;

Sie stoppt einfach die Ausführung der Funktion().

" return false; " wird die gesamte Ausführung des Prozesses beenden.

Grund:-

Der Grund für die Verwendung von return false; ist, dass Sie die Funktion nicht mehr im strengen Modus ausführen wollen.

<!DOCTYPE html>
<html lang="en" dir="ltr">
   <head>
      <meta charset="utf-8">
      <title></title>
   </head>
   <body>
      <a href="#" onclick="returnFalse();">Blah</a>
      <script type="text/javascript">
         function returnFalse(){
         console.log("returns false without location redirection....")
             return false;
             location.href = "http://www.google.com/";

         }
      </script>
   </body>
</html>

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