1

当我运行以下代码并在我的 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
4

3 回答 3

1

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

此外,如果您在按住元字符的同时按下键,例如按 Mx,jQuery 不会发送 'x' 的键,直到它也释放了 'M'。所以你不必担心像“meta down,x down,x up,meta up”这样的事情发生

于 2014-09-28T19:54:17.353 回答
0

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

于 2014-09-28T19:36:11.867 回答
0

我正在使用 React 并注意到同样的问题。e.metaKey适用于 keydown 但不适用于 keyup。e.keyCode然而,两者都是 93。

于 2020-07-18T16:09:27.683 回答