我目前正在开发一个Web应用程序,需要我检测是否按下了控件。
如果按下的键是ctrl,则使用keydown事件将标志设置为true,然后使用keyup事件将该标志设置为false。如果按下的键是控制键,我正在使用evt.ctrlKey
轻松返回true。
但令我惊讶的是,我可以看到evt.keyCode等于17,而evt.ctrlKey
给我一个错误。
这不会发生在keydown事件中。
请参阅此简单fiddle进行复制。我正在使用Firefox 27。
PS:我知道我可以测试keyCode是否为17,但我想知道我是否错过了什么。
答案 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
。更明确地说,顺序是:
此外,如果您正在寻找 CTRL 键本身,您应该检查密钥代码,而不是ctrlKey
属性。后者用于检查组合键,例如,如果你想要 CTRL + S ,你将检查{ keyCode: 83, ctrlKey: true }
的keyup / keydown事件。