evt.ctrlKey在jquery keyup事件中返回false

时间:2014-02-24 07:55:05

标签: javascript jquery keyevent

我目前正在开发一个Web应用程序,需要我检测是否按下了控件。

如果按下的键是ctrl,则使用keydown事件将标志设置为true,然后使用keyup事件将该标志设置为false。如果按下的键是控制键,我正在使用evt.ctrlKey轻松返回true。

但令我惊讶的是,我可以看到evt.keyCode等于17,而evt.ctrlKey给我一个错误。

这不会发生在keydown事件中。

请参阅此简单fiddle进行复制。我正在使用Firefox 27。

PS:我知道我可以测试keyCode是否为17,但我想知道我是否错过了什么。

2 个答案:

答案 0 :(得分:5)

根据w3c docs,ctrlKey事件属性如果是presse则返回true,否则返回false,因此你的代码工作正常。在keydown事件上按下ctrl - 所以它返回键码17和true,在键盘上没有按下ctrl,因此结果是17和false。

答案 1 :(得分:3)

keyup的文档说:

  

ctrlKey:true如果在触发事件时控制键已关闭。否则false

在按下/释放按键后触发了keyup和keydown事件。因此,ctrlKey的状态对于keydown事件是正确down,对于keyup事件是up。更明确地说,顺序是:

  1. CTRL 键。
  2. Keydown事件被解雇。
  3. 释放 CTRL 键。
  4. 触发了Keyup事件。
  5. 此外,如果您正在寻找 CTRL 本身,您应该检查密钥代码,而不是ctrlKey属性。后者用于检查组合键,例如,如果你想要 CTRL + S ,你将检查{ keyCode: 83, ctrlKey: true }的keyup / keydown事件。