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
.
var active = event.getModifierState(keyArg);
A
布尔
keyArg
KeyboardEvent.key
values which represent modifier keys, or the string
"Accel"
. This is case-sensitive.
IE9 uses
"Scroll"
for
"ScrollLock"
and
"Win"
for
"OS"
.
| Windows | Linux (GTK) | Mac | Android 2.3 | Android 3.0 or latter | |
|---|---|---|---|---|---|
"Alt"
|
要么 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 | 不支持 | |
"CapsLock"
|
During LED for ⇪ Caps Lock turned on | 不支持 | While CapsLock is locked | ||
"Control"
|
要么 Ctrl key or AltGr key pressed | Ctrl key pressed | 控制 key pressed | menu key pressed. | Ctrl key, 控制 key or menu key pressed. |
"Fn"
|
不支持 | 函数 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"
|
不支持 | ||||
"Hyper"
|
不支持 | ||||
"Meta"
|
不支持 | Meta key pressed | ⌘ Command key pressed | 不支持 | ⊞ Windows Logo key or 命令 key pressed |
"NumLock"
|
During LED for Num Lock turned on | A key on numpad pressed | 不支持 | While NumLock is locked | |
"OS"
|
⊞ Windows Logo key pressed | Super key or Hyper key pressed (typically, mapped to ⊞ Windows Logo key) | 不支持 | ||
"ScrollLock"
|
During LED for Scroll Lock turned on | During LED for Scroll Lock turned on, but typically this isn't supported by platform | 不支持 | While ScrollLock is locked | |
"Shift"
|
⇧ Shift key pressed | ||||
"Super"
|
不支持 | ||||
"Symbol"
|
不支持 | ||||
"SymbolLock"
|
不支持 | ||||
"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
"Accel"
virtual modifier has been effectively
弃用
in current drafts of the DOM3 Events specification.
getModifierState()
also accepts a deprecated virtual modifier named
"Accel"
.
event.getModifierState("Accel")
返回
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"
.
// 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"
,使用
event.altKey
,
event.ctrlKey
,
event.metaKey
and
event.shiftKey
may be more preferable.
| 规范 | 状态 | 注释 |
|---|---|---|
|
DOM (文档对象模型) 3 级事件规范
The definition of 'getModifierState()' in that specification. |
过时 | Initial definition ( Modifier Keys spec ) |
| 桌面 | 移动 | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
getModifierState
|
Chrome 31 | Edge 12 | Firefox 15 | IE 9 | Opera 17 | Safari 10.1 | WebView Android 4.4.3 | Chrome Android 31 | Firefox Android 15 | Opera Android 18 | Safari iOS 10.3 | Samsung Internet Android 2.0 |
"Accel"
as a parameter
弃用
非标
|
Chrome 48 | Edge ≤79 | Firefox 32 | IE No | Opera 35 | Safari No | WebView Android 48 | Chrome Android 48 | Firefox Android 32 | Opera Android 35 | Safari iOS No | Samsung Internet Android 5.0 |
"Alt"
as a parameter
弃用
非标
|
Chrome Yes | Edge ≤79 | Firefox Yes | IE ? | Opera Yes | Safari 10.1 | WebView Android Yes | Chrome Android Yes | Firefox Android Yes | Opera Android Yes | Safari iOS 10.3 | Samsung Internet Android Yes |
"AltGraph"
as a parameter
弃用
非标
|
Chrome 48 | Edge ≤79 | Firefox Yes | IE ? | Opera 35 | Safari 10.1 | WebView Android 48 | Chrome Android 48 | Firefox Android Yes | Opera Android 35 | Safari iOS 10.3 | Samsung Internet Android 5.0 |
"CapsLock"
as a parameter
|
Chrome 48 | Edge ≤79 | Firefox Yes | IE ? | Opera 35 | Safari ? | WebView Android 48 | Chrome Android 48 | Firefox Android Yes | Opera Android 35 | Safari iOS ? | Samsung Internet Android 5.0 |
"Control"
as a parameter
|
Chrome Yes | Edge ≤79 | Firefox Yes | IE ? | Opera Yes | Safari 10.1 | WebView Android Yes | Chrome Android Yes | Firefox Android Yes | Opera Android Yes | Safari iOS 10.3 | Samsung Internet Android Yes |
"Fn"
as a parameter
|
Chrome 48 | Edge ≤79 | Firefox Yes | IE ? | Opera 35 | Safari ? | WebView Android 48 | Chrome Android 48 | Firefox Android Yes | Opera Android 35 | Safari iOS ? | Samsung Internet Android 5.0 |
"FnLock"
as a parameter
|
Chrome Yes | Edge ≤79 | Firefox No | IE ? | Opera Yes | Safari ? | WebView Android Yes | Chrome Android Yes | Firefox Android No | Opera Android Yes | Safari iOS ? | Samsung Internet Android Yes |
"Hyper"
as a parameter
弃用
|
Chrome Yes | Edge ≤79 | Firefox No | IE ? | Opera Yes | Safari ? | WebView Android Yes | Chrome Android Yes | Firefox Android No | Opera Android Yes | Safari iOS ? | Samsung Internet Android Yes |
"Meta"
as a parameter
|
Chrome Yes | Edge ≤79 | Firefox Yes | IE ? | Opera Yes | Safari 10.1 | WebView Android Yes | Chrome Android Yes | Firefox Android Yes | Opera Android Yes | Safari iOS 10.3 | Samsung Internet Android Yes |
"NumLock"
as a parameter
|
Chrome 48 | Edge ≤79 | Firefox Yes | IE ? | Opera 35 | Safari ? | WebView Android 48 | Chrome Android 48 | Firefox Android Yes | Opera Android 35 | Safari iOS ? | Samsung Internet Android 5.0 |
"OS"
as a parameter
|
Chrome 48 |
Edge
12
Alternate Name
|
Firefox Yes |
IE
Yes
Alternate Name
|
Opera 35 | Safari ? | WebView Android 48 | Chrome Android 48 | Firefox Android Yes | Opera Android 35 | Safari iOS ? | Samsung Internet Android 5.0 |
"ScrollLock"
as a parameter
|
Chrome 48 |
Edge
12
Alternate Name
|
Firefox Yes |
IE
Yes
Alternate Name
|
Opera 35 | Safari ? | WebView Android 48 | Chrome Android 48 | Firefox Android Yes | Opera Android 35 | Safari iOS ? | Samsung Internet Android 5.0 |
"Shift"
as a parameter
|
Chrome Yes | Edge ≤79 | Firefox Yes | IE ? | Opera Yes | Safari 10.1 | WebView Android Yes | Chrome Android Yes | Firefox Android Yes | Opera Android Yes | Safari iOS 10.3 | Samsung Internet Android Yes |
"Super"
as a parameter
弃用
|
Chrome Yes | Edge ≤79 | Firefox No | IE ? | Opera Yes | Safari ? | WebView Android Yes | Chrome Android Yes | Firefox Android No | Opera Android Yes | Safari iOS ? | Samsung Internet Android Yes |
"Symbol"
as a parameter
|
Chrome 48 | Edge ≤79 | Firefox No | IE ? | Opera 35 | Safari ? | WebView Android 48 | Chrome Android 48 | Firefox Android No | Opera Android 35 | Safari iOS ? | Samsung Internet Android 5.0 |
"SymbolLock"
as a parameter
|
Chrome Yes | Edge ≤79 | Firefox No | IE ? | Opera Yes | Safari ? | WebView Android Yes | Chrome Android Yes | Firefox Android No | Opera Android Yes | Safari iOS ? | Samsung Internet Android Yes |
完整支持
不支持
兼容性未知
非标。预期跨浏览器支持较差。
弃用。不要用于新网站。
使用非标名称。
KeyboardEvent
this method belongs to.
MouseEvent.getModifierState
KeyboardEvent
getModifierState()
initKeyboardEvent()
initKeyEvent()