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, wasstopImmediatePropagation
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.
31 Stimmen
Diese Frage und ihre Antworten beziehen sich auf jQuery. Wenn Sie auf der Suche nach einer einfachen Javascript-Antwort sind, lesen Sie bitte event.preventDefault() vs. return false (kein jQuery)
0 Stimmen
@Oriol jQuery wird in der Frage nur verwendet, um die Codebeispiele zu vereinfachen. Wenn Sie die jQuery-Selektoren in reinen JS-Code umschreiben, haben Sie das gleiche Problem und das ist der Grund, warum Ihre Frage ein Duplikat ist.
6 Stimmen
Diese Antwort enthält eine Tabelle, in der alles erklärt wird stackoverflow.com/a/5302939/759452
1 Stimmen
Sie müssen die Unterscheidung zwischen vanilla js und jquery beachten
0 Stimmen
Return false innerhalb eines jQuery-Event-Handlers ist im Grunde dasselbe wie der Aufruf von e.preventDefault und e.stopPropagation für das übergebene jQuery.Event-Objekt. e.preventDefault() verhindert, dass das Standard-Ereignis auftritt, e.stopPropagation() verhindert, dass das Ereignis in die Höhe schießt und return false bewirkt beides. Beachten Sie, dass sich dieses Verhalten von normalen (nicht jQuery) Event-Handlern unterscheidet, bei denen insbesondere return false das Aufblähen des Ereignisses nicht verhindert.