A chave não dispara quando o keydown abre um alerta

Eu tenho dois manipuladores de eventos, um para keydown e um para keyup. O manipulador de eventos keydown aciona uma mensagem de alerta, mas isso impede que o evento de ativação seja disparado.

Você pode ver um exemplo muito simples aqui:http://jsfiddle.net/boblauer/jaGwT/ Quando o keydown abre um alerta, a chave não é acionada, mas quando um alerta não é aberto, a chave é disparada. Aqui está o código do 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');
});

Eu tenho uma biblioteca que suporta ouvir várias combinações de teclas (como 'd + f'), então quando uma tecla é pressionada, eu preciso adicioná-la a uma lista de teclas que estão atualmente pressionadas, e quando uma tecla é liberada, Eu preciso removê-lo da lista. O problema que estou correndo é, se eu quiser um alerta para mostrar quando d + f são pressionados ao mesmo tempo, meu código para remover essas chaves da lista 'atualmente pressionado' nunca é acionado, porque meu manipulador de chaves nunca é chamado .

Não consigo pensar em um bom trabalho em torno desse problema. Alguma ideia?

questionAnswers(1)

yourAnswerToTheQuestion