Die meisten Antworten konzentrieren sich mehr auf die Theorie als auf die Praxis, und es gibt einige große Unterschiede zwischen keyup
y keypress
in Bezug auf Eingabefeldwerte, zumindest in Firefox (getestet in 43).
Wenn der Benutzer Folgendes eingibt 1
in ein leeres Eingabeelement:
-
Der Wert des Eingabeelements ist ein leerer String (alter Wert) innerhalb der keypress
Handler
-
Der Wert des Eingabeelements wird sein 1
(neuer Wert) innerhalb der keyup
Handler.
Dies ist von entscheidender Bedeutung, wenn Sie etwas tun, bei dem es darauf ankommt, den neuen Wert nach der Eingabe und nicht den aktuellen Wert zu kennen, z. B. bei der Inline-Validierung oder der automatischen Tabulierung.
Szenario:
- Der Benutzer tippt
12345
in ein Eingabeelement.
- Der Benutzer wählt den Text aus
12345
.
- Der Benutzer tippt den Buchstaben
A
.
Wenn die keypress
Ereignis wird nach Eingabe des Buchstabens ausgelöst A
enthält das Textfeld jetzt nur noch den Buchstaben A
.
Aber:
- Feld.val() ist
12345
.
- $Feld.val().länge ist
5
- Die Benutzerauswahl ist eine leere Zeichenfolge (damit Sie nicht feststellen können, was durch Überschreiben der Auswahl gelöscht wurde).
Es scheint also, dass der Browser (Firefox 43) die Auswahl des Benutzers löscht, dann feuert die keypress
Veranstaltung, dann aktualisiert den Inhalt der Felder, dann Brände keyup
.
4 Stimmen
Ich habe herausgefunden, dass, wenn ich die TAB-Taste gedrückt halte, alle Felder kontinuierlich durchlaufen werden und nur "onkeydown" ausgelöst wird.
39 Stimmen
Ein Tastendruck-Ereignis stellt ein Zeichen dar, das für die Eingabe verwendet werden kann, wie z. B. 'a', 'D', '£', '©', usw. Andererseits repräsentieren die Ereignisse "keydown" und "keyup" JEDE Taste, die getippt wird, wie z.B. Backspace, Tab, up, down, home, end usw.
4 Stimmen
"(oder ist es möglich, eine Taste (KeyUp) loszulassen, ohne sie (KeyDown) zu drücken?)" - Ja. Zum Beispiel die Tabulatortaste: Das Keyup-Ereignis darf nicht von demselben Element erfasst werden wie das Keydown-Ereignis.