jQuery没有检测keyup上的修饰符

时间:2014-09-28 19:19:39

标签: javascript jquery keypress meta-key

当我运行以下代码并按下Mac上的命令键(使用Chrome)时,metaKey设置为keydown而不是keyup。难道我做错了什么?我只是想跟踪被按下的元键,所以我可以在我的JavaScript中使用它 - 如果有更好的方法请告诉我: - )

   var metaPressed = false;
   $(document).keydown(function(e) {
     console.log('keydown ' + e.keyCode);
     if (e.metaKey || e.ctrlKey) {
       console.log('meta pressed');
       metaPressed = true;
     }
   });
   $(document).keyup(function(e) {
     console.log('keyup ' + e.keyCode);
     if (e.metaKey || e.ctrlKey) {
       console.log('meta unpressed');
       metaPressed = false;
     }
   });

这是相关键的控制台输出

// Pressing cmd
keydown 91
meta pressed
keyup 91

// Pressing control 
keydown 17
meta pressed 
keyup 17

// Pressing non-meta like spacebar
keydown 32
keyup 32

3 个答案:

答案 0 :(得分:1)

我现在明白了,我误解了jQuery如何处理修改键。感谢@adeneo的提示,让我思考正确。

此外,如果您在按住元字符的同时按键,例如按M-x,jQuery没有发送' x'直到' M'也发布了。因此,您不必担心诸如" meta down,x down,x up,meta up"发生

答案 1 :(得分:0)

您将无法从密钥中检索该信息。我建议使用这个(e.keyCode === 17 || e.keyCode === 91)作为测试用例(分别是CTRL和META)

答案 2 :(得分:0)

我正在使用React并注意到相同的问题。 e.metaKey适用于键盘按下,但不适用于键盘按下。 e.keyCode两者均为93。