javascript - Keyup 有效,而 keypress 无效 Vanilla JS
问题描述
我有点重新学习 JS 并尝试在 vanilla JS 中制作模态窗口。所以,我的任务是让 Escape 按钮工作并在点击它时关闭模式。我发现当我在文档上放置 'keypress' 事件时,它无法工作,而 'keyup' 工作正常。我找不到关于为什么会这样的确切信息。我曾经使用 e.KeyCode 但发现它已被弃用。所以我主要有两个问题我找不到直接答案:
为什么键码不起作用?
2021 年处理键盘事件的最佳方式是什么?
这是代码。Console.log 不起作用。如果我将 keypress 更改为 keyup,一切正常。
document.addEventListener('keypress', function (e) {
console.log('Event fired');
if (e.key === "Escape" && !modal.classList.contains('hidden')) {
closeModal();
}
})
提前致谢。
此致,
瓦迪姆
解决方案
- 就像你说的“keyCode”已被弃用,但它仍然有效(见下面的例子)。
- 在您的情况下,最好的方法是使用 keyup 和 e.key。
您的代码按预期工作(使用任何其他键),但不会为Escape触发 keypress 事件。所以只能使用keydown和keyup。
document.addEventListener('keypress', function(e) {
console.log('keypress fired; ', e.key);
})
document.addEventListener('keyup', function(e) {
console.log('keyup fired; ', e.key);
if(e.keyCode == '27') alert('Escape');
})
推荐阅读
- django - Apache 上的 SMTPAuthenticationError 但标准服务器上没有。DJANGO 和 Apache2
- javascript - 绑定javascript后如何调用函数
- python - 该模型不适合 Tensorflow 和 GPU 的 Keras 错误
- bash - 如何在shell脚本中按函数对字符串数组进行排序
- javascript - 如何检索 yield 函数调用的值?
- java - Android 应用程序仅在真实设备上引发错误
- excel - 使用 vba 复制已打开的 IE 页面上的所有内容
- java - java中的@Scheduled和scheduledExecutorService.scheduleWithFixedRate
- docker - 在 dockerfile 中复制的文件:如果在特定位置,则找不到
- scala - 使用 Amazon X-Ray 配置 Scala Slick