2

我不知道这是如何工作的。我正在尝试学习关键事件。我让 keydown 工作,但 key up 不起作用。任何帮助表示赞赏。

      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.

}
4

2 回答 2

2

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

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

如果要测试Ctrl密钥本身是否已被解除,则应检查e.keyCodevalue 17。但是,e.keyCode不推荐使用e.key,并且应该在将来替换为。但是, e.key还没有广泛实施,所以你必须keyCode暂时使用。

于 2013-10-22T20:24:30.970 回答
1

如果您注销事件对象,您将在事件中看到它e.ctrlKey = truekeydowne.ctrlKey = falsekeyup事件中。

你为什么问?

我不能真正向您推荐来源或任何事实,但我的论文是这样的:

e.ctrlKey 属性可让您检查单击按钮时是否按下了 ctrl 键。通过检查你会发现,事件对象有很多这些属性供你检查。这样,更容易检查用户是否单击 ctrl+s 或 alt+f7 或其他。

e.ctrlKey 总是为假的原因可能是因为从不需要。也许很奇怪,但考虑到我上面的论点,首先设置它并没有任何意义。

解决您的问题的方法是检查 keyCode 属性 - ctrl 的键是 17。

function loopit1(e){
    if(e.keyCode === 17){
        alert("Key Up!");
    }
}

希望这可以帮助!

于 2013-10-22T20:25:55.513 回答