Nach Drücken von geben Sie ein. Ich möchte, dass nur das keyup
-Ereignis ausgelöst wird, aber blur
zuerst ausgelöst wird. So stornieren Sie blur
, wenn keyup
mit ausgelöst wird ?
Bitte schlagen Sie nicht vor, sowohl blur
als auch keyup
an eine einzige live()
-Methode zu binden.
Ich konnte class
attribut nicht ändern, so dass ich damit endete,
Bearbeiten
Um zu verhindern, dass beide Ereignisse ausgelöst werden, müssen Sie das Element irgendwie markieren, bevor es den Fokus verliert. Auf diese Weise kann Ihre blur
-Ereignisbehandlungsroutine feststellen, ob das Ereignis Gegenstand einer Schlüsseleingabe ist oder ob es den Fokus rechtmäßig verloren hat. Etwas wie das:
Probieren Sie es aus: Ссылка
Ursprüngliche Antwort
Wenn das Ereignis für keyup
ausgelöst wird, bereitet es vor, den Browserwarnungsdialog zu zeichnen, der den Fokus aus dem Dokument zieht und auf den modalen Dialog anwendet. Dadurch wird das Blur-Ereignis ausgelöst.
Das blur
-Ereignis springt dann ein und beendet seinen Ausführungskontext, bevor keyup
weiß, was es getroffen hat.
Dies wird demonstriert, indem etwas verwendet wird, das nicht den Fokus auf das Element richtet, wie zB console.log
: Ссылка
Die Reihenfolge, in der Ereignisse ausgelöst werden, ist implementierungsspezifisch, was bedeutet, dass Sie sich nicht darauf verlassen können, dass Firefox wie IE funktioniert. Siehe die Spezifikation: Ссылка . Probiere die Geige mit Warnungen in IE aus, und in diesem Fall siehst du, dass blur
vor keyup
in IE 7 trifft - und blur
wird in Chrome nicht ausgelöst!
Ich hatte ein ähnliches Problem. Ich erlaube dem Benutzer, ein einzelnes Feld zu bearbeiten, und wenn er die Eingabetaste drückt oder von diesem Feld wegbewegt, sende ich eine Ajax-Anfrage, um es zu aktualisieren. Ich habe festgestellt, dass beim Drücken von Enter die Ajax-Anfrage zweimal gesendet wurde.
Anstatt meine Anfrage auf "Enter" zu setzen, habe ich stattdessen versucht, $input.blur()
aufzurufen, und das hat funktioniert! Was mich dazu gebracht hat zu denken ... Wenn die Eingabetaste eine Unschärfe verursacht, muss ich sogar versuchen, sie zu erfassen?
In meinem Fall brauchte ich das nicht. Ich fand, dass alles, was ich brauchte, die Unschärfe war, weil die Eingabetaste es trotzdem ausgelöst hatte. Ich bin nicht sicher, ob das 100% über alle Browser ist, aber ich habe die aktuellen Versionen von Chrome, Firefox, IE und Safari getestet, die alle gut funktionierten.
Ich schlage also vor, dass Sie die Enter-Funktion nicht erfassen oder einfach nur blur () aufrufen, um die gewünschten Aktionen auszulösen.
Ich habe eine Eingabe, wo ein Benutzer es ändern kann, focus out oder drücken Sie die Eingabetaste.
Aber wenn du Enter drückst, wird Keydown und Blur ausgelöst, also wird myFunction()
zweimal ausgelöst.
Anstatt also zwei separate Funktionen für keydown
und blur
zu schreiben, können Sie sie stattdessen in eine einzige Funktion einfügen:
Versuchen Sie Folgendes. Das Hinzufügen einer Klasse - hinzugefügt in diesem Beispiel, im keyup-Ereignishandler und das Ändern des Selektors für das Blur-Ereignis verhindert, dass der Blur-Ereignishandler ausgelöst wird.
%Vor%Es wurde mir zur Kenntnis gebracht, anstatt eher Hinweise zu geben, sollte ich ausführlichere Erklärungen und Codebeispiele geben, also hier ist es: Es gibt immer den billigen Weg, eine externe Variable zu setzen:
%Vor%Es ist auch vorzuziehen, event.which statt event.keyCode zu verwenden (siehe Ссылка , um den Grund zu verstehen), und Es wird empfohlen, in JavaScript den Identitätsoperator '===' anstelle der Gleichheit '==' zu verwenden, da letzteres kaputt ist (siehe Welcher Gleichheitsoperator (== vs ===) sollte in JavaScript-Vergleichen verwendet werden? )
Tags und Links javascript jquery