Keyup nie strzela, gdy keydown otwiera alarm

Mam dwie procedury obsługi zdarzeń, jedną dla keydown i jedną dla keyupu. Obsługa zdarzeń keydown uruchamia komunikat ostrzegawczy, ale zapobiega to uruchomieniu zdarzenia kluczowania.

Tutaj możesz zobaczyć bardzo prosty przykład:http://jsfiddle.net/boblauer/jaGwT/ Gdy keydown otwiera alert, klucz nie jest uruchamiany, ale gdy alert nie zostanie otwarty, klucz zostanie uruchomiony. Oto kod z 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');
});

Mam bibliotekę, która obsługuje słuchanie wielu kombinacji klawiszy (takich jak „d + f”), więc po naciśnięciu klawisza muszę dodać go do listy aktualnie wciśniętych klawiszy, a po zwolnieniu klawisza Muszę go usunąć z listy. Problem, z którym mam do czynienia, polega na tym, że jeśli chcę wyświetlać alert, gdy d + f zostanie naciśnięty w tym samym czasie, mój kod do usuwania tych kluczy z listy „aktualnie wciśnięty” nigdy nie zostanie uruchomiony, ponieważ mój program obsługi kluczy nigdy nie jest wywoływany .

Nie mogę wymyślić dobrego rozwiązania tego problemu. Jakieś pomysły?

questionAnswers(1)

yourAnswerToTheQuestion