e.metaKey在JavaScript MouseEvent中引用了哪个键?

时间:2011-06-05 21:06:50

标签: javascript browser mouseevent dom-events keycode

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

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

MDN states

  

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

     

注意:在Macintosh键盘上,这是命令键()。在Windows上   键盘,这是Windows键()。

     

浏览器兼容性

     

enter image description here

FireFox和Chrome支持MDN声明MouseEvent.metaKey,但它无效。

MouseEvent.metaKey指的是哪个键?

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

3 个答案:

答案 0 :(得分:9)

如果您要问在Windows系统上按哪个密钥才能使MouseEvent的{​​{1}}属性为metaKey,答案是它取决于在浏览器上。有些Windows浏览器根本不支持它,并始终返回truefalse

我无法找到undefined的最新浏览器支持图表,但确实存在old one at QuirksMode.org

如果您使用的是jQuery,metaKeyit normalizes for cross-browser compatibility的事件属性之一。

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

答案 1 :(得分:3)

经验测试,显示以下结果。并不是说jQuery不能很好地正常化^ F。

在Mac上,在Safari Version 5.1.7&amp; 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上,在谷歌浏览器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 " : ""));
  });

答案 2 :(得分:0)

  

MouseEvent.metaKey引用哪个键?

它指的是Windows键 Windows Key

  

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

由于至少Firefox 48为bug,请参阅docs以获取更多信息。

解决方案:

改为使用 shiftKey 。其中有一个在事件对象上具有相同名称的属性。