KeyboardEvent: getModifierState() Methode

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Die KeyboardEvent.getModifierState() Methode gibt den aktuellen Zustand der angegebenen Modifikatortaste zurück: true, wenn der Modifikator aktiv ist (d.h. die Modifikatortaste gedrückt oder gesperrt ist), andernfalls false.

Syntax

js
getModifierState(key)

Parameter

key

Ein Wert für eine Modifikatortaste. Der Wert muss einer der KeyboardEvent.key Werte sein, die Modifikatortasten darstellen, oder der String "Accel" Veraltet . Dies ist case-sensitiv.

Rückgabewert

Ein boolescher Wert.

Modifikator-Tasten in Firefox

Wann gibt getModifierState() in Firefox true zurück?

Windows Linux (GTK) Mac Android 2.3 Android 3.0 oder höher
"Alt" Entweder Alt-Taste oder AltGr-Taste gedrückt Alt-Taste gedrückt ⌥ Option-Taste gedrückt Alt-Taste oder Option-Taste gedrückt
"AltGraph"

Beide Alt- und Ctrl-Tasten sind gedrückt oder AltGr-Taste ist gedrückt

Level 3 Shift-Taste (oder Level 5 Shift-Taste) gedrückt ⌥ Option-Taste gedrückt Nicht unterstützt Nicht unterstützt
"CapsLock" Während LED für ⇪ Caps Lock eingeschaltet Nicht unterstützt Während CapsLock gesperrt ist
"Control" Entweder Ctrl-Taste oder AltGr-Taste gedrückt Ctrl-Taste gedrückt control-Taste gedrückt menu-Taste gedrückt Ctrl-Taste, control-Taste oder menu-Taste gedrückt.
"Fn" Nicht unterstützt Nicht unterstützt Nicht unterstützt Nicht unterstützt Function-Taste ist gedrückt, aber es ist nicht sicher, welche Taste den Modifikatorstatus aktiviert. Fn-Taste auf Mac-Tastatur verursacht dies nicht.
"FnLock" Nicht unterstützt Nicht unterstützt Nicht unterstützt Nicht unterstützt Nicht unterstützt
"Hyper" Nicht unterstützt Nicht unterstützt Nicht unterstützt Nicht unterstützt Nicht unterstützt
"Meta" ⊞ Windows Logo-Taste gedrückt (ab Firefox 118) Meta-Taste gedrückt ⌘ Command-Taste gedrückt Nicht unterstützt ⊞ Windows Logo-Taste oder command-Taste gedrückt
"NumLock" Während LED für Num Lock eingeschaltet Eine Taste auf dem Numpad gedrückt Nicht unterstützt Während NumLock gesperrt ist
"OS" ⊞ Windows Logo-Taste gedrückt (vor Firefox 118) Super-Taste oder Hyper-Taste gedrückt (normalerweise der ⊞ Windows Logo-Taste zugeordnet) Nicht unterstützt Nicht unterstützt Nicht unterstützt
"ScrollLock" Während LED für Scroll Lock eingeschaltet Während LED für Scroll Lock eingeschaltet, aber normalerweise wird dies nicht von der Plattform unterstützt Nicht unterstützt Nicht unterstützt Während ScrollLock gesperrt ist
"Shift" ⇧ Shift-Taste gedrückt
"Super" Nicht unterstützt Nicht unterstützt Nicht unterstützt Nicht unterstützt Nicht unterstützt
"Symbol" Nicht unterstützt Nicht unterstützt Nicht unterstützt Nicht unterstützt Nicht unterstützt
"SymbolLock" Nicht unterstützt Nicht unterstützt Nicht unterstützt Nicht unterstützt Nicht unterstützt
  • Auf den anderen Plattformen könnten "Alt", "Control" und "Shift" unterstützt werden.
  • Alle Modifikatoren (außer "FnLock", "Hyper", "Super" und "Symbol", die nach der Implementierung von Firefox definiert werden) werden immer für nicht vertrauenswürdige Ereignisse in Firefox unterstützt. Dies hängt nicht von der Plattform ab.

"Accel" virtueller Modifikator

Hinweis: Der "Accel" virtuelle Modifikator wurde in aktuellen Entwürfen der DOM3 Events-Spezifikation effektiv veraltet.

getModifierState() akzeptiert auch einen veralteten virtuellen Modifikator namens "Accel". event.getModifierState("Accel") gibt true zurück, wenn mindestens einer der KeyboardEvent.ctrlKey oder KeyboardEvent.metaKey true ist.

In alten Implementierungen und veralteten Spezifikationen gab es true zurück, wenn ein Modifikator, der die typische Modifikatortaste für die Shortcut-Taste ist, gedrückt wurde. Zum Beispiel kann es auf Windows true zurückgeben, wenn die Ctrl-Taste gedrückt wird. Auf dem Mac kann das Drücken der ⌘ Command-Taste dazu führen, dass es true zurückgibt. Beachten Sie, dass welche Modifikatortaste es wahr zurückgibt, von Plattformen, Browsern und Benutzereinstellungen abhängt. Beispielsweise können Firefox-Benutzer dies mit einer Präferenz "ui.key.accelKey" anpassen.

Beispiele

js
function handleKeyboardEvent(event) {
  // Ignore if following modifier is active.
  if (
    event.getModifierState("Fn") ||
    event.getModifierState("Hyper") ||
    event.getModifierState("OS") ||
    event.getModifierState("Super") ||
    event.getModifierState("Win") /* hack for IE */
  ) {
    return;
  }

  // Also ignore if two or more modifiers except Shift are active.
  if (
    event.getModifierState("Control") +
      event.getModifierState("Alt") +
      event.getModifierState("Meta") >
    1
  ) {
    return;
  }

  // Handle shortcut key with standard modifier
  if (event.getModifierState("Accel")) {
    switch (event.key.toLowerCase()) {
      case "c":
        if (event.getModifierState("Shift")) {
          // Handle Accel + Shift + C
          event.preventDefault(); // consume the key event
        }
        break;
      case "k":
        if (!event.getModifierState("Shift")) {
          // Handle Accel + K
          event.preventDefault(); // consume the key event
        }
        break;
    }
    return;
  }

  // Do something different for arrow keys if ScrollLock is locked.
  if (
    (event.getModifierState("ScrollLock") ||
      event.getModifierState("Scroll")) /* hack for IE */ &&
    !event.getModifierState("Control") &&
    !event.getModifierState("Alt") &&
    !event.getModifierState("Meta")
  ) {
    switch (event.key) {
      case "ArrowDown":
      case "Down": // hack for IE and old Firefox
        event.preventDefault(); // consume the key event
        break;
      case "ArrowLeft":
      case "Left": // hack for IE and old Firefox
        // Do something different if ScrollLock is locked.
        event.preventDefault(); // consume the key event
        break;
      case "ArrowRight":
      case "Right": // hack for IE and old Firefox
        // Do something different if ScrollLock is locked.
        event.preventDefault(); // consume the key event
        break;
      case "ArrowUp":
      case "Up": // hack for IE and old Firefox
        // Do something different if ScrollLock is locked.
        event.preventDefault(); // consume the key event
        break;
    }
  }
}

Hinweis: Obwohl dieses Beispiel .getModifierState() mit "Alt", "Control", "Meta" und "Shift" verwendet, könnte es bevorzugter sein, event.altKey, event.ctrlKey, event.metaKey und event.shiftKey zu verwenden.

Spezifikationen

Specification
UI Events
# dom-keyboardevent-getmodifierstate

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch