The KeyboardEvent.getModifierState()
method returns the current state of the specified modifier key: true
if the modifier is active (that is the modifier key is pressed or locked), otherwise, false
.
Syntax
var active = event.getModifierState(keyArg);
Returns
A Boolean
Parameters
keyArg
- A modifier key value. The value must be one of the
KeyboardEvent.key
values which represent modifier keys, or the string"Accel"
' . This is case-sensitive.
Modifier keys on Internet Explorer
IE9 uses "Scroll"
for "ScrollLock"
and "Win"
for "OS"
.
Modifier keys on Gecko
Windows | Linux (GTK) | Mac | Android 2.3 | Android 3.0 or latter | |
---|---|---|---|---|---|
"Alt"
|
Either Alt key or AltGr key pressed | Alt key pressed | ⌥ Option key pressed | Alt key or option key pressed | |
"AltGraph"
|
Both Alt and Ctrl keys are pressed, or AltGr key is pressed | Level 3 Shift key (or Level 5 Shift key ) pressed | ⌥ Option key pressed | Not supported | |
"CapsLock"
|
During LED for ⇪ Caps Lock turned on | Not supported | While CapsLock is locked | ||
"Control"
|
Either Ctrl key or AltGr key pressed | Ctrl key pressed | control key pressed | menu key pressed. | Ctrl key, control key or menu key pressed. |
"Fn"
|
Not supported | Function key is pressed, but we're not sure what key makes the modifier state active. Fn key on Mac keyboard doesn't cause this active. | |||
"FnLock"
|
Not supported | ||||
"Hyper"
|
Not supported | ||||
"Meta"
|
Not supported | Meta key pressed | ⌘ Command key pressed | Not supported | ⊞ Windows Logo key or command key pressed |
"NumLock"
|
During LED for Num Lock turned on | A key on numpad pressed | Not supported | While NumLock is locked | |
"OS"
|
⊞ Windows Logo key pressed | Super key or Hyper key pressed (typically, mapped to ⊞ Windows Logo key) | Not supported | ||
"ScrollLock"
|
During LED for Scroll Lock turned on | During LED for Scroll Lock turned on, but typically this isn't supported by platform | Not supported | While ScrollLock is locked | |
"Shift"
|
⇧ Shift key pressed | ||||
"Super"
|
Not supported | ||||
"Symbol"
|
Not supported | ||||
"SymbolLock"
|
Not supported |
- On the other platforms, "Alt", "Control" and "Shift" may be supported.
- All modifiers (except
"FnLock"
,"Hyper"
,"Super"
and"Symbol"
which are defined after Gecko implements this) are always supported for untrusted events on Gecko. This doesn't depend on the platform.
"Accel"
virtual modifier
Note: The "Accel"
virtual modifier has been effectively deprecated in current drafts of the DOM3 Events specification.
getModifierState()
also accepts a deprecated virtual modifier named "Accel"
. event.getModifierState("Accel")
returns true
when at least one of KeyboardEvent.ctrlKey
or KeyboardEvent.metaKey
is true
.
In old implementations and outdated specifications, it returned true
when a modifier which is the typical modifier key for the shortcut key is pressed. For example, on Windows, pressing Ctrl key may make it return true
. However, on Mac, pressing ⌘ Command key may make it return true
. Note that which modifier key makes it return true depends on platforms, browsers, and user settings. For example, Firefox users can customize this with a pref, "ui.key.accelKey"
.
Example
// 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 somethig 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 Gecko
event.preventDefault(); // consume the key event
break;
case "ArrowLeft":
case "Left": // hack for IE and old Gecko
// Do something different if ScrollLock is locked.
event.preventDefault(); // consume the key event
break;
case "ArrowRight":
case "Right": // hack for IE and old Gecko
// Do something different if ScrollLock is locked.
event.preventDefault(); // consume the key event
break;
case "ArrowUp":
case "Up": // hack for IE and old Gecko
// Do something different if ScrollLock is locked.
event.preventDefault(); // consume the key event
break;
}
}
Although this example uses .getModifierState()
with "Alt"
, "Control"
, "Meta"
and "Shift"
, using event.altKey
, event.ctrlKey
, event.metaKey
and event.shiftKey
may be more preferable.
Specifications
Specification | Status | Comment |
Document Object Model (DOM) Level 3 Events SpecificationThe definition of 'getModifierState()' in that specification. | Obsolete | Initial definition (Modifier Keys spec) |
Browser compatibility
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
Update compatibility data on GitHub
Desktop | Mobile | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
getModifierState
|
Chrome
Full support 31 |
Edge
Full support 12 |
Firefox
Full support 15 |
IE
Full support 9 |
Opera
Full support 17 |
Safari
Full support 10.1 |
WebView Android
Full support 4.4.3 |
Chrome Android
Full support 31 |
Firefox Android
Full support 15 |
Opera Android
Full support 18 |
Safari iOS
Full support 10.3 |
Samsung Internet Android
Full support 2.0 |
|
Chrome
Full support 48 |
Edge
Full support ≤79 |
Firefox
Full support 32 |
IE
No support No |
Opera
Full support 35 |
Safari
No support No |
WebView Android
Full support 48 |
Chrome Android
Full support 48 |
Firefox Android
Full support 32 |
Opera Android
Full support 35 |
Safari iOS
No support No |
Samsung Internet Android
Full support 5.0 |
|
Chrome
Full support Yes |
Edge
Full support ≤79 |
Firefox
Full support Yes |
IE
? |
Opera
Full support Yes |
Safari
Full support 10.1 |
WebView Android
Full support Yes |
Chrome Android
Full support Yes |
Firefox Android
Full support Yes |
Opera Android
Full support Yes |
Safari iOS
Full support 10.3 |
Samsung Internet Android
Full support Yes |
|
Chrome
Full support 48 |
Edge
Full support ≤79 |
Firefox
Full support Yes |
IE
? |
Opera
Full support 35 |
Safari
Full support 10.1 |
WebView Android
Full support 48 |
Chrome Android
Full support 48 |
Firefox Android
Full support Yes |
Opera Android
Full support 35 |
Safari iOS
Full support 10.3 |
Samsung Internet Android
Full support 5.0 |
"CapsLock" as a parameter
|
Chrome
Full support 48 |
Edge
Full support ≤79 |
Firefox
Full support Yes |
IE
? |
Opera
Full support 35 |
Safari
? |
WebView Android
Full support 48 |
Chrome Android
Full support 48 |
Firefox Android
Full support Yes |
Opera Android
Full support 35 |
Safari iOS
? |
Samsung Internet Android
Full support 5.0 |
"Control" as a parameter
|
Chrome
Full support Yes |
Edge
Full support ≤79 |
Firefox
Full support Yes |
IE
? |
Opera
Full support Yes |
Safari
Full support 10.1 |
WebView Android
Full support Yes |
Chrome Android
Full support Yes |
Firefox Android
Full support Yes |
Opera Android
Full support Yes |
Safari iOS
Full support 10.3 |
Samsung Internet Android
Full support Yes |
"Fn" as a parameter
|
Chrome
Full support 48 |
Edge
Full support ≤79 |
Firefox
Full support Yes |
IE
? |
Opera
Full support 35 |
Safari
? |
WebView Android
Full support 48 |
Chrome Android
Full support 48 |
Firefox Android
Full support Yes |
Opera Android
Full support 35 |
Safari iOS
? |
Samsung Internet Android
Full support 5.0 |
"FnLock" as a parameter
|
Chrome
Full support Yes |
Edge
Full support ≤79 |
Firefox
No support No |
IE
? |
Opera
Full support Yes |
Safari
? |
WebView Android
Full support Yes |
Chrome Android
Full support Yes |
Firefox Android
No support No |
Opera Android
Full support Yes |
Safari iOS
? |
Samsung Internet Android
Full support Yes |
|
Chrome
Full support Yes |
Edge
Full support ≤79 |
Firefox
No support No |
IE
? |
Opera
Full support Yes |
Safari
? |
WebView Android
Full support Yes |
Chrome Android
Full support Yes |
Firefox Android
No support No |
Opera Android
Full support Yes |
Safari iOS
? |
Samsung Internet Android
Full support Yes |
"Meta" as a parameter
|
Chrome
Full support Yes |
Edge
Full support ≤79 |
Firefox
Full support Yes |
IE
? |
Opera
Full support Yes |
Safari
Full support 10.1 |
WebView Android
Full support Yes |
Chrome Android
Full support Yes |
Firefox Android
Full support Yes |
Opera Android
Full support Yes |
Safari iOS
Full support 10.3 |
Samsung Internet Android
Full support Yes |
"NumLock" as a parameter
|
Chrome
Full support 48 |
Edge
Full support ≤79 |
Firefox
Full support Yes |
IE
? |
Opera
Full support 35 |
Safari
? |
WebView Android
Full support 48 |
Chrome Android
Full support 48 |
Firefox Android
Full support Yes |
Opera Android
Full support 35 |
Safari iOS
? |
Samsung Internet Android
Full support 5.0 |
"OS" as a parameter
|
Chrome
Full support 48 |
Edge Full support 12 Full support 12 Alternate Name' Uses the non-standard name: |
Firefox
Full support Yes |
IE Full support Yes Full support Yes Alternate Name' Uses the non-standard name: |
Opera
Full support 35 |
Safari
? |
WebView Android
Full support 48 |
Chrome Android
Full support 48 |
Firefox Android
Full support Yes |
Opera Android
Full support 35 |
Safari iOS
? |
Samsung Internet Android
Full support 5.0 |
"ScrollLock" as a parameter
|
Chrome
Full support 48 |
Edge Full support 12 Full support 12 Alternate Name' Uses the non-standard name: |
Firefox
Full support Yes |
IE Full support Yes Full support Yes Alternate Name' Uses the non-standard name: |
Opera
Full support 35 |
Safari
? |
WebView Android
Full support 48 |
Chrome Android
Full support 48 |
Firefox Android
Full support Yes |
Opera Android
Full support 35 |
Safari iOS
? |
Samsung Internet Android
Full support 5.0 |
"Shift" as a parameter
|
Chrome
Full support Yes |
Edge
Full support ≤79 |
Firefox
Full support Yes |
IE
? |
Opera
Full support Yes |
Safari
Full support 10.1 |
WebView Android
Full support Yes |
Chrome Android
Full support Yes |
Firefox Android
Full support Yes |
Opera Android
Full support Yes |
Safari iOS
Full support 10.3 |
Samsung Internet Android
Full support Yes |
|
Chrome
Full support Yes |
Edge
Full support ≤79 |
Firefox
No support No |
IE
? |
Opera
Full support Yes |
Safari
? |
WebView Android
Full support Yes |
Chrome Android
Full support Yes |
Firefox Android
No support No |
Opera Android
Full support Yes |
Safari iOS
? |
Samsung Internet Android
Full support Yes |
"Symbol" as a parameter
|
Chrome
Full support 48 |
Edge
Full support ≤79 |
Firefox
No support No |
IE
? |
Opera
Full support 35 |
Safari
? |
WebView Android
Full support 48 |
Chrome Android
Full support 48 |
Firefox Android
No support No |
Opera Android
Full support 35 |
Safari iOS
? |
Samsung Internet Android
Full support 5.0 |
"SymbolLock" as a parameter
|
Chrome
Full support Yes |
Edge
Full support ≤79 |
Firefox
No support No |
IE
? |
Opera
Full support Yes |
Safari
? |
WebView Android
Full support Yes |
Chrome Android
Full support Yes |
Firefox Android
No support No |
Opera Android
Full support Yes |
Safari iOS
? |
Samsung Internet Android
Full support Yes |
Legend
- Full support
- Full support
- No support
- No support
- Compatibility unknown
- Compatibility unknown
- Non-standard. Expect poor cross-browser support.'
- Non-standard. Expect poor cross-browser support.
- Deprecated. Not for use in new websites.'
- Deprecated. Not for use in new websites.
- Uses a non-standard name.'
- Uses a non-standard name.
See also
- The
KeyboardEvent
this method belongs to. MouseEvent.getModifierState
KeyboardEvent.getModifierState() by Mozilla Contributors is licensed under CC-BY-SA 2.5.