Key Up无法使用Javascript

时间:2013-10-22 20:07:02

标签: javascript events keyup

我不知道这是如何运作的。我正在努力学习关键事件。我得到了工作,但关键不起作用。任何帮助表示赞赏。

      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.

}

2 个答案:

答案 0 :(得分:2)

确实有效。 ctrlKey属性指示在事件触发时是否按下Ctrl键。因此,如果Ctrl键是刚出现的键,它将不会触发,因为keyup事件在Ctrl键出现后暂时触发。如果在{em>另一个键出现时Ctrl键关闭,则e.ctrlKey将为真。

但是,它必须是一个不会导致浏览器操作从文档中删除焦点的键 - 如果我在按住T的同时启用Ctrl键,浏览器在事件发生之前将移动到新选项卡。试用Ctrl+Alt:在按住Ctrl键的同时,按下并释放Alt

如果您想测试Ctrl密钥本身是否已解除,则应检查e.keyCode17。但是,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!");
    }
}

希望这有帮助!