如何在键盘事件之外读取键盘状态?

时间:2011-02-17 23:57:36

标签: javascript jquery

有没有办法在键盘事件处理程序之外读取键盘状态?具体来说,我需要在页面加载期间检查shift键是否关闭。我正在使用jQuery。

5 个答案:

答案 0 :(得分:3)

JavaScript中没有查询键盘状态。希望有。你自己听事件并跟踪状态。

答案 1 :(得分:2)

当您按住shift键时,此代码似乎有效,但它可以在后续按键上运行。您可以在第一次按键后取消绑定,但这也意味着即使在页面加载后它也会运行。

$(document).ready(function() {
    $(document).keydown(function(e) {
        if(e.shiftKey)
            alert("Shift was held");
    });
});

答案 2 :(得分:2)

从Marko的回答中被盗和改进。

$(document).keydown(function(e) {
    if(e.shiftKey)
        alert("Shift was held");
});

只需删除$(document).ready,因为你想在页面加载时使用它,而不是在。

之后

答案 3 :(得分:2)

您可以使用我的库KeyboardJS。它有一个名为.getActiveKeys()的方法,它会告诉你哪些键是活动的。该库实际上是以常识方式绑定到键和键组合。

我建议使用事件绑定。

KeyboardJS.bind.key('shift', function(){
    //logic on key down
}, function(){
    //logic on key up
});

请注意,您也可以执行复杂的操作,例如shift + z + x或z + x + c。如果将shift,z,x压在一起,或者z,x,c被压在一起,则会触发。

KeyboardJS.bind.key('shift + z + x, z + x + c', function(){
    //logic on key down
}, function(){
    //logic on key up
});

您可以阅读在事件回调之外按下的键,如

var activeKeys = KeyboardJS.getActiveKeys();

希望有所帮助, 干杯!

答案 4 :(得分:0)

这并不是我想要的解决方案,但这是一种依赖事件的解决方法:

var shiftKeyState = false;
var ctrlKeyState = false;
$(document).ready(function () {
    $(document).bind("keydown keyup click", function (e) {
        shiftKeyState = e.shiftKey;
        ctrlKeyState = e.ctrlKey;
    });    
});