Keyup not firing when keydown opens an alert
Asked Answered
C

1

7

I have two event handlers, one for keydown and one for keyup. The keydown event handler triggers an alert message, but this prevents the keyup event from firing.

You can see a very simple example here: http://jsfiddle.net/boblauer/jaGwT/ When the keydown opens an alert, the keyup is not fired, but when an alert is not opened, the keyup is fired. Here's the code from the jsfiddle:

var i = 0;
window.addEventListener('keydown', function(e) {
    if (i++ % 2) alert('down');
    console.log('down');
});

window.addEventListener('keyup', function(e) {
    alert('up');
    console.log('up');
});

I have a library that supports listening to multiple key combinations (such as 'd + f'), so when a key is pressed, I need to add it to a list of keys that are currently pressed, and when a key is released, I need to remove it from said list. The problem I'm running to is, if I want an alert to show when d + f are pressed at the same time, my code to remove those keys from the 'currently pressed' list never fires, because my keyup handler is never called.

I can't think of a good work around to this problem. Any ideas?

Conduction answered 27/11, 2012 at 21:20 Comment(2)
That's because alert() blocks - you shouldn't really design your site around using alert()... maybe roll-your-own or use some kind of dialog.Loper
It also happens in other situations, such as tabbing onto a hyperlink and then hitting enter to open the link. When that happens, the enter's keyup event is not fired.Conduction
O
4

The alert prevents the event from happening. What you could do instead is trigger this function manually, because it happens anyways.

var keyupfunction = function(e){
    alert('up');
    console.log('up');
}

window.addEventListener('keyup', keyupfunction);

window.addEventListener('keydown', function(e) {
    if (i++ % 2) alert('down');
    console.log('down');
    keyupfunction(e);
});

But really, you shouldn't be using alerts. It prevents these events, but who knows what else it might break. Use something custom instead.

Ovolo answered 27/11, 2012 at 21:23 Comment(3)
The keyup doesn't necessarily follow the keydown event. For example, I can press and hold ctrl, and then press another key without letting up on ctrl.Conduction
@BobLauer exactly, but in case of alert, there is no other way around itOvolo
Thank you, I never would have guessed that the alert was the problem.Bucaramanga

© 2022 - 2024 — McMap. All rights reserved.