AP257
AP257

Reputation: 93803

Why won't keyup() and keydown() play nicely together?

I can't get the jQuery keyup and keydown events to work together. See this jsFiddle: http://jsfiddle.net/CXkam/1/

Code here too for ease:

$(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));
});

If you comment out the keypress() and keydown() handlers, then the keyup() alert fires.

But if you don't, then keyup() never fires.

Why not?

Thanks!

Upvotes: 4

Views: 1056

Answers (2)

TimFoolery
TimFoolery

Reputation: 1925

The .keyup and .keypress events won't fire if you release the key while the dialogue box is up because the keyup message is sent to the dialogue box, which, for reasons beyond my very limited understanding of things, is not considered part of the document. What you can do, if you want to see it "work," is hold a key down (let's go with T!), hit spacebar to dismiss the dialogue box, and then release the T key. The .keyup message will then be sent to the document and processed as intended.

If you get rid of the .keydown and .keypress functions -- or the alerts within them -- then .keyup will work just fine.

Upvotes: 7

JohnP
JohnP

Reputation: 50019

hmm, I think it's actually to do with a problem with alert(). Maybe it's being called too fast or something. Because if you replace it with console.log calls, you can clearly see it's working

http://jsfiddle.net/WJsV6/ Try it in FF. All 3 methods actually fire

Upvotes: 5

Related Questions