JavaScript - CTRL KeyCode 17不起作用?

时间:2014-01-06 02:41:24

标签: javascript

我正在创建一个需要检测 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',你可以看到。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

这个条件

event.keyCode != 13 || event.keyCode != 38 || event.keyCode != 40 || event.keyCode != 17

总是是真的。这可以用两种情况证明。

  • 如果event.keyCode13,那么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);
    }
});

DEMO