我正在创建一个需要检测 CTRL 键是否被按下的应用程序。
我的代码如下:
document.addEventListener('keydown', function(event) {
if (event.keyCode != 13 || event.keyCode != 38 || event.keyCode != 40 || event.keyCode != 17)
{
// execute this
}
( CTRL 键是该if语句中的最后一个键码。)
在搜索互联网后,它说使用17作为键码,但如果我按 CTRL ,它仍然执行“//执行此操作”。 它不应该执行它。
所有其他键在if语句中正常工作,我正在使用Chrome 31 stable / official。
我也在使用'keydown',而不是'keypress',你可以看到。
提前感谢您的帮助!
答案 0 :(得分:4)
这个条件
event.keyCode != 13 || event.keyCode != 38 || event.keyCode != 40 || event.keyCode != 17
总是是真的。这可以用两种情况证明。
如果event.keyCode
为13
,那么event.keyCode != 38
将导致表达式返回true
,因为13 != 38
。
如果event.keyCode
不是13
,则条件event.keyCode != 13
会导致表达式返回true.
我相信您希望使用&&
运算符而不是||
运算符。
此外,我认为使用event.keyCode !== 17
更可读,而不是检查!event.ctrlKey
,因为它告诉读者您正在检查 ctrl 键的代码,你必须在密钥代码表中查找17
才能找出它的含义。
(另外,the !==
and ===
operators are preferred in the Javascript community over the !=
and ==
operators。)
答案 1 :(得分:2)
1 将或运营商更改为和运营商(&&)
2 修复代码错误,缺少分号和括号
您的最终代码应如下所示:
document.addEventListener('keydown', function (event) {
if (event.keyCode != 13 && event.keyCode != 38 && event.keyCode != 40 && event.keyCode != 17) {
alert(event.keyCode);
}
});