为什么keyup()和keydown()不能很好地协同工作?

AP2*_*257 4 jquery

我无法让jQuery keyupkeydown事件一起工作.看到这个jsFiddle:http://jsfiddle.net/CXkam/1/

这里的代码也很容易:

$(document).keyup(function (event) {
    alert('Keyup');
});
$(document).keypress(function(e) {
    alert('Keypress: ' + String.fromCharCode(e.which));
});
$(document).keydown(function(e) {
    alert('Keydown: ' + String.fromCharCode(e.which));
});
Run Code Online (Sandbox Code Playgroud)

如果您注释掉keypress()keydown()处理程序,则keyup()警报会触发.

但如果你不这样做,那么keyup()永远不要开火.

为什么不?

谢谢!

Tim*_*ery 7

如果在对话框启动时释放密钥,则不会触发.keyup和.keypress事件,因为密钥消息被发送到对话框,由于我对事物的理解非常有限,因此不会将其视为一部分.该文件.你可以做什么,如果你想看到它"工作",按住一个键(让我们去T!),点击空格键关闭对话框,然后释放T键.然后将.keyup消息发送到文档并按预期处理.

如果你摆脱了.keydown和.keypress函数 - 或者其中的警报 - 那么.keyup就可以了.


Joh*_*hnP 5

嗯,我认为这实际上与alert()的问题有关.也许它被称为太快或其他东西.因为如果用console.log调用替换它,你可以清楚地看到它正在工作

http://jsfiddle.net/WJsV6/在FF中尝试一下.所有3种方法实际上都是火