jQuery keyup事件没有设置event.shiftKey

时间:2014-03-07 22:16:15

标签: javascript jquery

我正在尝试使用jQuery来再次按下并释放Shift键。

参见JSFiddle here

$(document).bind('keydown', function (event) {
    if (event.shiftKey) {
        document.body.innerHTML += 'shift down<br>';
    }
});
$(document).bind('keyup', function (event) {
    if (event.shiftKey) {
        document.body.innerHTML += 'shift up<br>';
    }
});

一般来说,keyup / keydown事件似乎被正确调用。但是,如果shift是唯一按下的按钮,则仅为keyDOWN事件设置event.shiftKey,而不是为keyUP事件设置{{1}}。你可以看到在JSFiddle中,在这种情况下永远不会打印“key up”消息。但是,如果我按shift +其他东西(例如Ctrl),一切都会按原样运行。

这是jQuery中的错误吗?任何解决方法?

4 个答案:

答案 0 :(得分:2)

使用它$(document).bind('keyup keydown',function(e){shifted = e.shiftKey});

答案 1 :(得分:1)

尝试this

$(document).bind('keydown', function (event) {
    if (event.keyCode == 16) {
        document.body.innerHTML += 'shift down<br>';
    }
});
$(document).bind('keyup', function (event) {
    if (event.keyCode == 16) {
        document.body.innerHTML += 'shift up<br>';
    }
});

检查键码是否有效..但是event.shiftkey似乎在keyup中不起作用

答案 2 :(得分:1)

e.shiftKey有一个错误,我试过了。不起作用(我猜可能在较旧的实例上) 而e.which === 16的效果非常好。

{
    cancelUrl: "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&xo_node_fallback=true&force_sa=true&fallback=1&token=EC-90M952801L841090P",
    intent: "sale",
    paymentToken: "EC-90M952801L841090P"
}

答案 3 :(得分:0)

正如ardeneo在评论中提到的,我误解了.shiftKey属性。正确的方法似乎是同时监听keyup和keydown,然后检查event.shiftKey以查看它是否被按下或抬起。