Verhindert das Auslösen von Blur- und Keyup-Ereignissen, nachdem in einem Textfeld die Eingabetaste gedrückt wurde

8

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.

%Vor%     
Bhavesh Gangani 21.06.2012, 16:54
quelle

6 Antworten

0

Ich konnte class attribut nicht ändern, so dass ich damit endete,

%Vor%     
Bhavesh Gangani 27.09.2014, 06:23
quelle
6

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:

%Vor%

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!

    
Chris Baker 21.06.2012 16:59
quelle
2

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.

    
xtempore 07.07.2014 01:56
quelle
1

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:

%Vor%     
Emre 03.06.2017 02:44
quelle
0

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%     
Austin Wang 05.08.2015 06:39
quelle
-2

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? )

    
bstenm 21.06.2012 17:20
quelle

Tags und Links