当我运行以下代码并按下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
答案 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。