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.

Javascript keydown, keyup, keypress

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.

DrĂŒcke eine Taste 

Noch nichts gedrĂŒckt.

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.

keyGibt den Wert der Taste zurĂŒck. Wird von alten Browsern u.U. nicht unterstĂŒtzt.
codeGibt einen numerischen Wert der Taste zurĂŒck. Wichtig fĂŒr Steuertasten wie ENTER.
repeatGibt true zurĂŒck, wenn eine Taste dauerhaft gehalten wird.
shiftKeyGibt true zurĂŒck, wenn die SHIFT-Taste zusĂ€tzlich gedrĂŒckt wird.
ctrlKeyGibt true zurĂŒck, wenn die CTRL-Taste zusĂ€tzlich gedrĂŒckt wird.
altKeyGibt 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:

KEYDOWN
KEYUP

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">