我不知道这是如何运作的。我正在努力学习关键事件。我得到了工作,但关键不起作用。任何帮助表示赞赏。
window.onload = function(){
window.addEventListener('keyup' , loopit1 ); // this doesn't work.
/*window.addEventListener('keydown' , loopit2 );*/ // this works. That's why it's commented out.
function loopit1(e){
if(e.ctrlKey){
alert("Key Up!");
}
//This doesn't work.
}
/*function loopit2(e){
if(e.ctrlKey){
alert("Key Down!");
}
}*// This Works. That's why it's commented out.
}
答案 0 :(得分:2)
确实有效。 ctrlKey
属性指示在事件触发时是否按下Ctrl
键。因此,如果Ctrl
键是刚出现的键,它将不会触发,因为keyup
事件在Ctrl
键出现后暂时触发。如果在{em>另一个键出现时Ctrl
键关闭,则e.ctrlKey
将为真。
但是,它必须是一个不会导致浏览器操作从文档中删除焦点的键 - 如果我在按住T
的同时启用Ctrl
键,浏览器在事件发生之前将移动到新选项卡。试用Ctrl+Alt
:在按住Ctrl
键的同时,按下并释放Alt
。
如果您想测试Ctrl
密钥本身是否已解除,则应检查e.keyCode
值17
。但是,e.keyCode
is deprecated,将来应更换为e.key
。 但是, e.key
尚未广泛实施,因此您必须暂时使用keyCode
。
答案 1 :(得分:1)
如果您注销事件对象,您会在e.ctrlKey = true
事件中看到keydown
,但e.ctrlKey = false
事件会看到keyup
。
为什么要问?
我真的不能把你推荐给一个消息来源或任何事实,但我的论文是这样的:
e.ctrlKey
属性可供您在单击按钮时检查是否按下了ctrl键。通过检查它会发现,事件对象有很多这些属性供您检查。这样,检查用户是单击ctrl + s还是alt + f7或其他更容易。
e.ctrlKey始终为false的原因可能是因为永远不需要。也许很奇怪,但鉴于我上面的论点,把它设置在第一位并没有多大意义。
问题的解决方案是检查keyCode属性 - ctrl的键是17。
function loopit1(e){
if(e.keyCode === 17){
alert("Key Up!");
}
}
希望这有帮助!