CSS, HTML und Javascript mit {stil}

keydown, keyup und keypress • Events des Keyboards

Javascript onkeydown, onkeyup

onkeydown, onkeypress und onkeyup (in dieser Reihenfolge) werden vom einfachen Drücken und Loslassen einer Taste auf der Tastatur erzeugt.

onkeydown und onkeypress feuern kontinuierlich, so lange der Benutzer die Taste gerückt hält. Wenn der Benutzer die Taste loslässt, feuert onkeyup ein einziges Mal.

onkeydown ruft einen Event Handler auf, wenn der Benutzer eine Taste auf der Tastatur herunterdrückt.

onkeyup ruft einen Event Handler auf, wenn der Benutzer eine Taste auf der Tastatur losgelassen hat.

onkeypress ruft einen Event Handler auf, wenn der Benutzer eine Taste auf der Tastatur herunterdrückt oder festhält.

In der DOM Level 2-Empfehlung waren noch keine Tastatur-Ereignisse zu finden, denn sie waren noch zu kompliziert, um sie in einen generellen Standard einzubinden. Aber Tastatur-Ereignisse sind fundamental, in allen modernen Browsern implementiert und der HTML 4-Standard erlaubte schon keydown, keypress und keyup-Ereignisse für viele Elemente.

Natürlich sind die Keyboard Events heute nicht einfacher geworden: Verschiedene Sprachen und mobile Geräte mit grafischen Tastaturen erschweren die Indentifikation von Tastatur-Events.

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

Keycodes 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
KEYPRESS
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 – Keycode 13 – abgefangen werden.

document.getElementById('form').addEventListener ('keydown', function (event) {
   if (event.which == 13) {
      event.preventDefault();
      var field = event.target;
      if (field.getAttribute('data-index')) {
         var 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="num2">

Mobile Geräte: Tastatur- oder Keyboard-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 Keycode für diese Tasten.