19

MouseEvent.metaKey似乎不起作用。在 FireFox 和 Chrome 上,false即使我Win在单击时按住键,它也会返回:

<!doctype html>
<button onclick=alert(event.metaKey)>click while holding "meta key"</button>

MDN声明

返回 a的MouseEvent.metaKey只读属性Boolean,指示事件发生时Meta是否按下了键 ( true) 或未按下 ( )。false

注意:在 Macintosh 键盘上,这是命令键 (⌘</kbd>). On Windows keyboards, this is the windows key (⊞</kbd>).

浏览器兼容性

在此处输入图像描述

FireFox 和 Chrome 支持MDN 声明MouseEvent.metaKey,但它不起作用。

MouseEvent.metaKey 指的是哪个键 ?

为什么上面的代码不起作用?

4

3 回答 3

11

如果您要问在 Windows 系统上必须按哪个键才能使MouseEvent' 的metaKey属性成为true,答案是它取决于浏览器。有些 Windows 浏览器根本不支持它,总是返回falseor undefined

我找不到浏览器支持的最新图表metaKey,尽管在 QuirksMode.org 上有一个非常旧的图表。

如果您使用的是 jQuery,它是为跨浏览器兼容性而标准化metaKey的事件属性之一。

如果您需要在您的网站上为某些功能实现键 + 鼠标事件,我会使用该Shift键,以便它适用于所有系统。(如果您需要多个关键选项,我建议您重新考虑您的设计。)

于 2011-06-06T00:23:10.983 回答
4

实证检验,显示以下结果。并不是说 jQuery 在规范化 ^F 方面做得非常好。

在 Mac 上,在 Safari 版本 5.1.7 和 6.0 中。

 F   Keypress: 102, 102  
⌘F   Keypress: 102, 102  meta 
⌥F   Keypress: 402, 402  alt 
⌃F   Keypress: 6, 6  ctrl
⇧F   Keypress: 70, 70  shift 

在 Mac 上,在 Firefox 15.0.1 中:

 F   Keypress: 102, 0
⌘F   Keypress: 102, 0 meta 
⌥F   Keypress: 402, 0 alt
⌃F   Keypress: 102, 0 ctrl
⇧F   Keypress: 70, 0 shift

在 Mac 上,在 Google Chrome 18.0.1024.168 中:

 F   Keypress: 102, 102
⌘F   (No triggers sent for ⌘ + key)
⌥F   Keypress: 402, 402 alt
⌃F   Keypress: 6, 6 ctrl
⇧F   Keypress: 70, 70 shift

测试代码:// jquery-1.7.2

  $(document.defaultView).keypress(function(e) {
      console.log("Keypress: " + e.which + ", " + e.keyCode, " "
          + (e.metaKey ? "meta " : "")
          + (e.ctrlKey ? "ctrl " : "")
          + (e.altKey ? "alt " : "")
          + (e.shiftKey ? "shift " : ""));
  });
于 2012-10-09T13:26:06.310 回答
0

MouseEvent.metaKey 指的是哪个键?

它指的是windows键Windows Key

为什么上面的代码不起作用?

由于至少 Firefox 48的错误,请参阅文档以获取更多信息。

一个解法 :

改为使用shiftKey。它在事件对象上有一个同名的属性。

于 2017-08-19T18:17:35.713 回答