如何在JavaScript中捕获按键ALT+N

8

我有一些简单的代码,可以记录按下的键码,例如:

window.addEventListener('keypress', function(e) {
  console.log(e.keyCode);
})

似乎Alt + 键盘上其他按键都可以使用,除了Alt + N。 看来根本没有注册这个事件!只按N(不加Alt)可以使用,其他组合如Ctrl + N也可以使用。当我按下Alt + N时没有反应,所以据我所知它还没有被系统保留。我在Mac上使用Chrome。

这是我的电脑出了问题还是别人也会遇到相同的情况?如果别人也遇到了这个问题,为什么会这样,有没有方法可以检测?

2个回答

7

请尝试:

window.addEventListener('keydown', function(e) {
  if (e.altKey == true && e.keyCode == 78)
    console.log('Alt + N'); 
});


1
请注意,您不需要为alt检测创建单独的变量,event对象具有altKey属性,当按住alt键时该属性值为true。 - Patrick Evans
1
@PatrickEvans 感谢提供的链接,我从未注意到这个属性。我阅读了 keypress 的文档,并找到了 keypress 无法与修饰键一起使用的原因。我已经在我的答案中更新了来自文档的摘录。@Ashraf 我认为你应该将这个信息包含在你的答案中,以便完整回答 OP 的问题。 - Mayank K Rastogi
这个适用于Mac和Windows吗?谢谢回答! - Crashalot
@Crashalot 是的。 - Ashraf

3
使用keypress事件对于我来说无法处理Alt+N和任何与Alt相关的组合。一些组合可以使用Ctrl,而另一些则不行。
然而,当我监听keydownkeyup事件时,我能够记录这些事件。所以,我想你可以在Alt上监听keydown事件,如果在Alt生成keyup之前有一个Nkeydown事件,那么你就成功地检测到了Alt+N组合键。

我不确定为什么会发生这种情况。

编辑 根据Mozilla文档

当按下产生字符值的键时,将触发keypress事件。产生字符值的键的示例包括字母、数字和标点符号键。

不产生字符值的键的示例是修改键,例如Alt、Shift、Ctrl或Meta

至于为什么在Chrome中有些快捷键可以工作,而有些不能,Mozilla说道:

Chrome不会为已知的键盘快捷键触发keypress事件。哪些键盘快捷键是已知的取决于用户的系统。使用keydown事件来实现键盘快捷键。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接