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.

1voto

Alireza Punkte 92209

Im Grunde, diese Art und Weise Sie Dinge zu kombinieren, weil jQuery ist ein Rahmen, der vor allem auf HTML-Elemente konzentriert, Sie im Grunde verhindern, dass die Standard-, aber zur gleichen Zeit, Sie stoppen Propagation zu blasen.

Wir können also einfach sagen, return false in jQuery ist gleich:

return false ist e.preventDefault AND e.stopPropagation

Aber auch nicht vergessen, es ist alles in jQuery oder DOM-bezogene Funktionen, wenn Sie es auf das Element, im Grunde, es verhindert, dass alles von der Auslösung einschließlich der Standard-Verhalten und die Ausbreitung des Ereignisses.

Grundsätzlich ist vor der Verwendung von return false; zunächst verstehen, was e.preventDefault(); y e.stopPropagation(); Wenn Sie meinen, dass Sie beides gleichzeitig brauchen, dann nutzen Sie es einfach.

Also im Grunde dieser Code unten:

$('div').click(function () {
  return false;
});

でございます gleich zu diesem Code:

$('div').click(function (event) {
  event.preventDefault();
  event.stopPropagation();
});

1voto

Meiner Erfahrung nach wird event.stopPropagation() meist in CSS-Effekten oder Animationen verwendet, z.B. wenn Sie einen Hover-Effekt für Karten- und Schaltflächenelemente haben, wenn Sie mit dem Mauszeiger über die Schaltfläche fahren, werden sowohl die Karte als auch die Schaltflächen mit dem Hover-Effekt ausgelöst. In diesem Fall können Sie event.stopPropagation() verwenden, um das Blubbern zu stoppen, und event.preventDefault() dient dazu, das Standardverhalten von Browseraktionen zu verhindern. Wenn der Benutzer das Formular durch Drücken der Eingabetaste abschickt, wird der Browser durch das Keypress-Ereignis ausgelöst, nicht durch das Click-Ereignis. Hier sollten Sie event.preventDefault() verwenden, um unangemessenes Verhalten zu vermeiden. Ich weiß nicht, was zum Teufel ist return false; sorry.für mehr Klarheit besuchen Sie diesen Link und spielen Sie mit Zeile #33 https://www.codecademy.com/courses/introduction-to-javascript/lessons/requests-i/exercises/xhr-get-request-iv

0voto

Dilip0165 Punkte 4277

Meiner Meinung nach ist es aus meiner Erfahrung heraus immer besser, die

event.preventDefault() 

Praktisch zu stoppen oder zu verhindern vorlegen Ereignis, wann immer wir benötigt, anstatt return false event.preventDefault() funktioniert gut.

14 Stimmen

Warum besser? Sie haben hier buchstäblich keinerlei Rechtfertigung geliefert. -1.

0 Stimmen

Wenn es mehrere Ereignisbindungen gibt, ist e.preventDefault() zielführender als return false.

0 Stimmen

preventDefault ist eine englische Formulierung, die ich so verstehe: "prevents the default". return false ist einige englische Worte, die ich verstehen, es "gibt falsch", aber ich habe keine Ahnung, warum, bis ich Google diesen kryptischen Code. Und Bonus, ich kann separat steuern stopPropagation y preventDefault .

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