Start · Sprachen · JavaScript · Referenz · MouseEvent.metaKey

MouseEvent.metaKey

Eigenschaft

Schreibgeschützter boolescher Wert, der angibt, ob die Meta-Taste (⌘ unter macOS, ⊞ Windows-Taste unter Windows) beim Auslösen des Mausereignisses gedrückt war.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

MouseEvent.metaKey

Beschreibung

Die Eigenschaft metaKey eines MouseEvent ist true, wenn beim Auslösen des Ereignisses (z. B. click, mousedown, contextmenu) die Meta-Taste gedrückt war, sonst false. Unter macOS ist das die Befehlstaste (⌘ Cmd), unter Windows meist die Windows-Taste (⊞). Unter Linux hängt es von der Desktop-Umgebung ab (oft die „Super“-Taste).

Praktisch nutzt man metaKey vor allem, um plattformübliche Tastenkürzel nachzubilden: Unter macOS entspricht ⌘+Klick dem Windows-/Linux-Verhalten von Strg+Klick – etwa zum Öffnen eines Links in einem neuen Tab oder für eine Mehrfachauswahl in Listen. Deshalb prüft man in der Regel event.metaKey || event.ctrlKey gemeinsam.

Da metaKey von UIEvent-basierten Mausereignissen geerbt wird, steht sie auch in PointerEvent, WheelEvent und DragEvent zur Verfügung. Für synthetische Ereignisse kann der Wert über das Options-Objekt des Konstruktors (new MouseEvent('click', { metaKey: true })) gesetzt werden; nachträglich ist er schreibgeschützt.

Rückgabewert

Typ
boolean
Beschreibung
true, wenn die Meta-Taste zum Zeitpunkt des Ereignisses gedrückt war, sonst false.

Beispiele

Meta-Taste beim Klick erkennen

document.addEventListener('click', (event) => {
  if (event.metaKey) {
    console.log('Klick mit gedrückter Meta-Taste');
  } else {
    console.log('Normaler Klick');
  }
});
Klick mit gedrückter Meta-Taste

Plattformübergreifende Mehrfachauswahl (⌘ bzw. Strg)

const list = document.querySelector('#dateiliste');

list.addEventListener('click', (event) => {
  const item = event.target.closest('li');
  if (!item) return;

  // macOS: ⌘+Klick, Windows/Linux: Strg+Klick
  const toggle = event.metaKey || event.ctrlKey;

  if (!toggle) {
    list.querySelectorAll('li.selected')
      .forEach((li) => li.classList.remove('selected'));
  }
  item.classList.toggle('selected');
  console.log('Ausgewählt:', list.querySelectorAll('li.selected').length);
});
Ausgewählt: 2

Eigene Link-Navigation, ⌘/Strg-Klick dem Browser überlassen

document.querySelectorAll('a.spa-link').forEach((link) => {
  link.addEventListener('click', (event) => {
    // Neuer Tab gewünscht? Dann Standardverhalten nicht verhindern
    if (event.metaKey || event.ctrlKey || event.shiftKey || event.button !== 0) {
      return;
    }
    event.preventDefault();
    history.pushState({}, '', link.href);
    console.log('Client-seitig navigiert zu', link.pathname);
  });
});
Client-seitig navigiert zu /produkte

Synthetisches Ereignis mit metaKey erzeugen

const button = document.createElement('button');
button.addEventListener('click', (e) => console.log('metaKey:', e.metaKey));

button.dispatchEvent(new MouseEvent('click', { metaKey: true, bubbles: true }));
button.dispatchEvent(new MouseEvent('click'));
metaKey: true metaKey: false

// Wichtig · Fallstricke

  • Plattformunterschiede: Unter Windows fängt das Betriebssystem die Windows-Taste oft selbst ab (Startmenü, Tastenkürzel). metaKey ist daher dort unzuverlässig. Für Kürzel, die auf allen Plattformen funktionieren sollen, immer event.metaKey || event.ctrlKey prüfen.
  • macOS und Strg+Klick: Unter macOS löst Strg+Klick ein contextmenu-Ereignis aus. Mehrfachauswahl sollte deshalb dort über metaKey laufen.
  • Nicht mit der Alt-Taste verwechseln: Die Wahltaste (⌥ Option) unter macOS wird über altKey gemeldet, nicht über metaKey.
  • Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wie event.metaKey = true wird stillschweigend ignoriert (im Strict Mode gibt es einen TypeError).
  • Für einen allgemeineren Abfrageweg gibt es event.getModifierState('Meta'). Diese Methode kennt auch Zustände wie 'CapsLock'.
  • Kompatibilität: wird von allen modernen Browsern unterstützt. Ältere Linux-Browser meldeten die Super-Taste teilweise als 'OS' statt als 'Meta'.