keydown, keyup â Events der Tastatur
keydown, keypress und keyup (in dieser Reihenfolge) werden vom einfachen DrĂŒcken und Loslassen einer Taste auf der Tastatur erzeugt. keydown und keypress feuern kontinuierlich so lang der Benutzer die Taste gerĂŒckt hĂ€lt. Wenn der Benutzer die Taste loslĂ€sst, feuert keyup ein einziges Mal.
Keyboard-Events
Das Abfragen einzelner Zeichen der Tastatur ist eher ein Spezialfall in Webseiten, meist reicht der fertige Text in einem Eingabefeld. Gebraucht werden Werte zur Steuerung mit den Pfeiltasten, die Enter-Taste als EingabestÀtigung oder die Tab-Taste als Navigation in einem Slider.
keydown feuert, wenn der Benutzer eine Taste auf der Tastatur herunterdrĂŒckt.
keyup feuert, wenn der Benutzer eine Taste auf der Tastatur losgelassen hat. Der Klassiker: Entdecken, dass der Benutzer eine Eingabe in einem Formularfeld getÀtigt hat.
keypress feuert, wenn der Benutzer eine Taste auf der Tastatur herunterdrĂŒckt oder festhĂ€lt. keypress hĂ€ngt in einem hohen AusmaĂ vom verwendeten GerĂ€t ab, gilt als veraltet und soll nicht mehr genutzt werden.
| Event | Beschreibung |
|---|---|
keydown |
tritt ein, wenn eine Taste gedrĂŒckt wird. |
keyup |
tritt ein, wenn eine Taste losgelassen wird. |
keypress |
(veraltet) War fĂŒr Zeichen-Tasten gedacht, heute wird stattdessen keydown genutzt. |
keydown feuert auch beim DrĂŒcken einer Steuer- oder Metataste wie SHIFT, ESC, DEL, bei Pfeiltasten â, â, â, â oder Tottaste ÂŽ(Accent aigu).
Die Tastatur der Touchscreens
Tastatur-Ereignisse waren in den Anfangszeiten von HTML und Javascript zu kompliziert, um sie in einen generellen Standard einzubinden. NatĂŒrlich sind die Keyboard-Events heute nicht einfacher geworden: Verschiedene Sprachen und mobile GerĂ€te mit grafischen (virtuellen) Tastaturen erschweren die Indentifikation von Tastatur-Events.
Auf der virtuellen Tastatur werden keydown und keyup nicht unbedingt ausgelöst, manche Browser liefern nur input-Events.
Das Abfragen der Keyboard-Events ist nicht immer zuverlĂ€ssig. Auf Tabletts oder Smartphones wird das DrĂŒcken der Shift-Taste nicht unbedingt abgefangen und eine Unterscheidung in GroĂ- und Kleinschreibung kann schwer fallen. Ein iPhone hat zwar Tasten fĂŒr ĂŒ, ö, Ă€ und Ă, aber meldet »0« als Code fĂŒr diese Tasten.
Eigenschaften von Tastatur-Ereignissen
Wenn sich das Skript um keyup und keydown kĂŒmmert, geht es meist um den Wert der Taste. In Formularen könnte z.B. die Enter-Taste das Formular auch ohne SUBMIT absenden, in Spielen bewegen die Tasten â, â, â und â den Cursor.
| key | Gibt den Wert der Taste zurĂŒck. Wird von alten Browsern u.U. nicht unterstĂŒtzt. |
| code | Gibt einen numerischen Wert der Taste zurĂŒck. Wichtig fĂŒr Steuertasten wie ENTER. |
| repeat | Gibt true zurĂŒck, wenn eine Taste dauerhaft gehalten wird. |
| shiftKey | Gibt true zurĂŒck, wenn die SHIFT-Taste zusĂ€tzlich gedrĂŒckt wird. |
| ctrlKey | Gibt true zurĂŒck, wenn die CTRL-Taste zusĂ€tzlich gedrĂŒckt wird. |
| altKey | Gibt true zurĂŒck, wenn die ALT-Taste zusĂ€tzlich gedrĂŒckt wird (Option-Taste unter Mac OS). |
| keyCode (veraltet) | gab einen Namen fĂŒr die gedrĂŒckte Taste zurĂŒck, z.B. "Digit7" oder "Numpad7" bei einer Zahl oder "KeyP" fĂŒr einen Buchstaben |
| charCode (veraltet) | gab einen Unicode-Wert als Symbol fĂŒr die gedrĂŒckte Taste zurĂŒck. |
document.querySelector(".input1").addEventListener ("keyup", (evt) => {
if (evt.key === "Enter") {
console.log ("Bingo!")
}
});
Attribute
- type (string, readonly, case-insensitive, muss ein XML-Name sein)
- Typ des Ereignisses
- target (readonly)
- Objekt zu dem das Ereignis ursprĂŒnglich gesendet wurde
- which
- Die gedrĂŒckte Taste als Ascii-Wert
Codes beim DrĂŒcken einer Taste
Bei einem Tastatur-Ereignis wird ein numerischer Code fĂŒr die jeweilige Taste erzeugt. FĂŒr die Taste âAâ ist das z.B. die Zahl 65. Dieselbe Taste erzeugt mindestens zwei Zeichen, nĂ€mlich âAâ und âaâ, je nachdem, ob die Shift-Taste gedrĂŒckt wurde oder nicht. Auf einem Mac erzeugt die A-Taste noch weitere Zeichen, wenn die Alt-Taste zusĂ€tzlich gedrĂŒckt wird.
Kleine und groĂe Zeichen eingeben:
Return in Formularen abfangen
Damit die Eingabefelder das Formular bei einem Return nicht absenden, sondern das jeweils nĂ€chste Eingabefeld automatisch in den Fokus setzen, muss das DrĂŒcken der Entertaste â evt.key === "Enter" â abgefangen werden.
document.getElementById('form').addEventListener ('keydown', (evt) => {
if (evt.key === "Enter") {
event.preventDefault();
const field = event.target;
if (field.getAttribute('data-index')) {
const next = document.getElementById(field.getAttribute('data-index'));
next.focus();
}
}
});
Welches Eingabefeld jeweils angesteuert wird, entscheidet das data-Attribut.
<input type="text" id="num1" data-index="num2"> <input type="text" id="num2" data-index="num3">