javascript - 使用 keyCode 来配对 keydown 和 keyup 事件

标签 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 上的测试来看,key 似乎是 undefined。该文档还描述了which,但我不确定其中的差异是什么。

这里使用的 keyCode 正确吗?我不在乎哪些键被按下,只关心某些键被按下。我也无法使用 input 事件。

最佳答案

我建议使用回退机制,首先处理 MDN 的建议,然后回退到旧的解决方案。 但如果您使用 jQuery,则应该使用 provided methods获取 key 代码

// 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);

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

关于javascript - 使用 keyCode 来配对 keydown 和 keyup 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36096011/

相关文章:

javascript - 无法将动态添加的文本区域呈现为 TinyMCE 4.1.8

javascript - 具有认知语音功能的 Azure Bot 框架无法正常工作

javascript - 如何在 Extjs 中完全清除图表?

javascript - 为什么我们需要 backbone js 或任何 JS MVC 框架?

javascript - 使用 jQuery 捕获 Shift 和 Click 事件

javascript - React UseEffect 被调用了两次

javascript - symfony 获取表单属性

javascript - HTML 将滚动条附加到模态内容

javascript - Power BI 嵌入 + VueJS 错误 : "TypeError: Cannot read property ' powerBiEmbed' of null"

javascript - 如何使用 extjs 调用服务器端脚本并让用户下载文本响应?