javascript - cancel - keydown event preventdefault




event.preventDefault() vs. return false (8)

Auf diese Art und Weise kombinieren Sie Dinge, weil jQuery ein Framework ist, das sich hauptsächlich auf HTML-Elemente konzentriert. Sie verhindern im Wesentlichen die Standardeinstellung, gleichzeitig stoppen Sie jedoch die Verbreitung.

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

return false ist e.preventDefault UND e.stopPropagation

Vergessen Sie auch nicht, dass alles in jQuery- oder DOM-bezogenen Funktionen enthalten ist. Wenn Sie es für das Element ausführen, wird grundsätzlich verhindert, dass alles ausgelöst wird, einschließlich des Standardverhaltens und der Weitergabe des Ereignisses.

Grundsätzlich bevor Sie mit return false; verstehe zuerst, was e.preventDefault(); und e.stopPropagation(); Wenn Sie glauben, Sie brauchen beide gleichzeitig, verwenden Sie es einfach.

Also im Grunde dieser Code unten:

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

ist gleich diesem Code:

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

Wenn ich verhindern möchte, dass andere Ereignishandler ausgeführt werden, nachdem ein bestimmtes Ereignis ausgelöst wurde, kann ich eine von zwei Techniken verwenden. Ich werde in den Beispielen jQuery verwenden, aber das gilt auch für plain-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, um die Ausbreitung von Ereignissen zu stoppen?

Für mich return false; ist einfacher, kürzer und wahrscheinlich weniger fehleranfällig als das Ausführen einer Methode. Bei der Methode müssen Sie auf korrekte Hülle, 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 es vermeiden sollte, dies zu tun und stattdessen preventDefault verwenden? Was ist der bessere Weg?


Aus meiner Erfahrung gibt es mindestens einen klaren Vorteil, wenn Sie event.preventDefault () über return false verwenden. Angenommen, Sie erfassen das Click-Ereignis mit einem Ankertag. Andernfalls wäre dies ein großes Problem, wenn der Benutzer von der aktuellen Seite weg navigiert würde. Wenn Ihr Click-Handler return false verwendet, um die Browsernavigation zu verhindern, besteht die Möglichkeit, dass der Interpreter die return-Anweisung nicht erreicht und der Browser das Standardverhalten des Ankertags ausführt.

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

  // oops...runtime error...where oh where will the href take me?

  return false;
});

Die Verwendung von event.preventDefault () hat den Vorteil, dass Sie dies als erste Zeile im Handler hinzufügen können. Dadurch wird sichergestellt, dass das Standardverhalten des Ankers nicht ausgelöst wird, unabhängig davon, ob die letzte Zeile der Funktion nicht erreicht wird (z. B. Laufzeitfehler.) ).

$('a').click(function (e) {
  e.preventDefault();

  // custom handling here

  // oops...runtime error, but at least the user isn't navigated away.
});

Dies ist keine "JavaScript" -Frage; Es ist eine Frage zum Design von jQuery.

jQuery und das zuvor verknüpfte Zitat von John Resig (in karim79's message karim79's ) scheinen das Missverständnis der Quelle zu sein, wie Eventhandler im Allgemeinen funktionieren.

Fakt: Ein Event-Handler, der false zurückgibt, verhindert die Standardaktion für dieses Ereignis. Die Ereignisausbreitung wird nicht angehalten. Eventhandler haben seit den alten Tagen von Netscape Navigator immer so gearbeitet.

Die Dokumentation von MDN erläutert, wie return false in einem Event-Handler funktioniert

Was in jQuery passiert, ist nicht dasselbe wie bei Event-Handlern. DOM-Ereignis-Listener und "angefügte" MSIE-Ereignisse sind eine ganz andere Sache.

Weitere Informationen finden Sie unter attachEvent in MSDN und in der Dokumentation zu W3C DOM 2-Ereignissen .


Ich denke, der beste Weg, dies zu tun, ist die Verwendung von event.preventDefault() denn wenn im Handler eine Ausnahme event.preventDefault() wird, wird die Anweisung return false übersprungen, und das Verhalten steht im Gegensatz zu dem, was Sie möchten.

Wenn Sie jedoch sicher sind, dass der Code keine Ausnahmen auslöst, können Sie sich für eine beliebige Methode entscheiden.

Wenn Sie immer noch mit false zurückkehren möchten, können Sie Ihren gesamten Handler-Code in einen try-catch-Block wie folgt einfügen:

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

Meine Meinung aus meiner Erfahrung besagt, dass es immer besser zu benutzen ist

event.preventDefault() 

Praktisch zum Stoppen oder Unterbinden des event.preventDefault() Ereignisses, wann immer es erforderlich ist, anstatt return false event.preventDefault() return false event.preventDefault() funktioniert gut.


Meiner Ansicht nach

event.preventDefault()

ist die von w3c angegebene Methode zum Abbrechen von Ereignissen.

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

Sie können return false nicht in jeder Situation verwenden. Wenn Sie im href-Attribut eine Javascript-Funktion angeben und false zurückgeben, wird der Benutzer auf eine Seite mit falsch geschriebenem String umgeleitet.


Wenn Sie jQuery verwenden, führt return false beim Aufruf drei verschiedene Schritte aus:

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

Weitere Informationen und Beispiele finden Sie unter jQuery-Ereignisse: Stop (Mis) mit Return False .


return false innerhalb eines jQuery-Ereignishandlers e.preventDefault e.stopPropagation dem Aufruf von e.preventDefault und e.stopPropagation für das übergebene jQuery.Event-Objekt.

e.preventDefault() verhindert das Auftreten des Standardereignisses, e.stopPropagation() verhindert, dass das Ereignis sprudelt, und return false e.stopPropagation() beide. Beachten Sie, dass sich dieses Verhalten von normalen (Nicht-jQuery) -Ereignishandlern unterscheidet, in denen insbesondere return false wird, damit das Ereignis nicht sprudelt.

Quelle: John Resig

Nutzen Sie event.preventDefault () vor "return false", um einen Href-Klick abzubrechen?





event-propagation