使用keyCode配对keydown和keyup事件

时间:2016-03-18 23:37:57

标签: javascript

我想跟踪在给定时间按下哪些键,如下所示:

var keys = {};
$(document.body).on('keydown', function(e) {
    keys[e.keyCode] = true;
});
$(document.body).on('keyup', function(e) {
    delete keys[e.keyCode];
});

但是,从MDN开始,我们不推荐使用keyCode,并建议key。通过在Chrome上进行测试,看起来keyundefined。该文档还描述了which,但我不确定它们之间的区别。

keyCode在这里使用是正确的吗?我不关心哪些键是关闭的,只是我知道有些键是按下的。我也无法使用input事件。

1 个答案:

答案 0 :(得分:1)

我建议使用一个回退机制,首先处理来自MDN的建议,然后再回到旧解决方案。 但是如果你使用jQuery,你应该使用provided methods来获取密钥代码

// jquery
$(document.body).on('keyup', function(e) {
    delete keys[e.which];
});

// vanilla
document.body.addEventListener('keyup', function (e) {
    delete keys[(e.key && e.keyCode.charCodeAt(0)) || e.which || e.keyCode];
}, true);

然而,这只适用于可打印字符,并且通常需要对问题进行更深入的调查。