Start · Sprachen · JavaScript · Referenz · UIEvent.which

UIEvent.which

Eigenschaft

Veraltete, schreibgeschützte Eigenschaft: liefert bei Tastatur-Events den <code>keyCode</code>/<code>charCode</code> und bei Maus-Events die gedrückte Taste (1 = links, 2 = Mitte, 3 = rechts).

seit JavaScript Veraltet (deprecated), aber in allen Browsern noch deprecated seit ja Kategorie: webapi

Signatur

UIEvent.which

Beschreibung

UIEvent.which ist ein Überbleibsel aus der Zeit der Browserkriege. Die Eigenschaft sollte die Unterschiede zwischen keyCode, charCode und button ausgleichen und gibt deshalb je nach Event-Typ eine andere Zahl zurück.

  • Bei keydown/keyup: derselbe Wert wie KeyboardEvent.keyCode, also ein systemabhängiger Tastencode (z. B. 13 für Enter, 65 für A).
  • Bei keypress: der Zeichencode (charCode) des erzeugten Zeichens, z. B. 97 für ein kleines „a“.
  • Bei Maus-Events: 0 = keine Taste, 1 = links, 2 = Mitte, 3 = rechts. Das ist um eins verschoben gegenüber MouseEvent.button (0/1/2).
  • Bei allen anderen Events: in der Regel 0.

In neuem Code solltest du which nicht mehr verwenden. Für Tastatureingaben gibt es KeyboardEvent.key (das tatsächliche Zeichen bzw. den Tastennamen) und KeyboardEvent.code (die physische Taste). Für Maustasten nimmst du MouseEvent.button oder MouseEvent.buttons. Wichtig ist which eigentlich nur noch, wenn du alten Code pflegst, z. B. jQuery-basierte Handler, die sich auf event.which verlassen.

Rückgabewert

Typ
number
Beschreibung
Eine vorzeichenlose Ganzzahl. Je nach Event-Typ ist es ein Tastencode, ein Zeichencode oder die Maustaste (0–3). Die Eigenschaft ist schreibgeschützt.

Beispiele

Altcode: Enter-Taste per which erkennen (und moderne Alternative)

const input = document.querySelector('#suche');

input.addEventListener('keydown', (event) => {
  // Veraltet: numerischer Tastencode
  if (event.which === 13) {
    console.log('Enter (which):', event.which);
  }

  // Empfohlen: sprechender Tastenname
  if (event.key === 'Enter') {
    console.log('Enter (key):', event.key);
  }
});
Enter (which): 13 Enter (key): Enter

Maustaste bestimmen: which vs. button

document.addEventListener('mousedown', (event) => {
  const namen = { 1: 'links', 2: 'Mitte', 3: 'rechts' };
  console.log(`which=${event.which} (${namen[event.which]}), button=${event.button}`);
});

// Kontextmenü unterdrücken, damit Rechtsklicks sichtbar werden
document.addEventListener('contextmenu', (event) => event.preventDefault());
which=1 (links), button=0 which=3 (rechts), button=2

Migrations-Helfer für Legacy-Handler

// Gibt eine einheitliche Maustaste zurück (0 = links, 1 = Mitte, 2 = rechts)
const getMouseButton = (event) =>
  typeof event.button === 'number' ? event.button : event.which - 1;

// Ersetzt alte which-Vergleiche bei Tastatur-Events durch key
const isEscape = (event) =>
  event.key === 'Escape' || event.key === 'Esc' || event.which === 27;

document.addEventListener('keydown', (event) => {
  if (isEscape(event)) console.log('Dialog schließen');
});

document.addEventListener('mouseup', (event) => {
  console.log('Taste:', getMouseButton(event));
});
Dialog schließen Taste: 0

// Wichtig · Fallstricke

  • Veraltet: which ist nur aus Kompatibilitätsgründen noch spezifiziert. Nimm stattdessen KeyboardEvent.key/code bzw. MouseEvent.button/buttons.
  • Uneinheitliche Werte: Tastencodes hängen von Tastaturlayout, Betriebssystem und Browser ab. Bei keydown liefert which z. B. für „a“ und „A“ beide Male 65, bei keypress dagegen 97 bzw. 65.
  • Versatz um eins: Bei der Maus ist which gleich button + 1. Das führt beim Umstellen leicht zu Fehlern.
  • keypress ist ebenfalls veraltet und wird für Nicht-Zeichen-Tasten (Pfeiltasten, Escape) teilweise gar nicht ausgelöst.
  • IME/Mobilgeräte: Bei Eingabemethoden (z. B. Android-Tastaturen, Eingabe mit Zeichen-Komposition) liefert which oft 229 oder 0 statt eines verwertbaren Codes.
  • Browser-Unterstützung: Chrome, Firefox, Safari und Edge unterstützen die Eigenschaft weiterhin. Sie kann aber langfristig entfernt werden.