Javascript: evento Keydown: tecla de seta “para cima” evitando mais eventos Keydown de tecla de seta? (respondido: fantasma do teclado)

Eu encontrei muitas perguntas relacionadas (aqui e em outros lugares), mas não encontrei essa especificamente.

Estou tentando ouvir eventos keydown para as teclas de seta (37-40), no entanto, ao usar as teclas de seta em uma determinada ordem, a seta subsequente não gera eventos "keydown".

Exemplo:http://blog.pothoven.net/2008/05/keydown-vs-keypress-in-javascript.html

Nesta página, clique na caixa "digite aqui ->".Pressione e segure a tecla de seta para a direita: a tabela é atualizada para o código de acesso 39Mantendo a tecla de seta para a direita, pressione e segure a tecla de seta: table updates to 38Mantendo as teclas de seta para a direita e para cima, pressione e segure a tecla de seta para a esquerda: tablenão atualizar

No entanto, se eu fizer a mesma coisa, mas usandobaixa tecla de seta em vez deacima tecla de seta, então, funciona como esperado.

Além disso, se eu usar o teclado em vez das teclas de seta, ele funcionará como esperado.

Estou impedindo a operação normal do evento keydown (retornando false no listener de evento e chamando preventDefault ()), mas o comportamento persiste.

Eu pensei que poderia ser o meu teclado, mas isso acontece em um laptop, assim como na máquina de um amigo.

Alguém tem alguma idéia sobre o que está acontecendo? Ou algumas boas ideias sobre soluções alternativas?

[edit] Aqui está um exemplo do que eu quero dizer. Eu sei que isso pode não funcionar em todos os navegadores, mas eu apenas joguei tudo isso no meu laptop para demonstrar o que está acontecendo comigo (no Chrome on W7 e também no Chrome e Safari no Mac OS 10.6.8)

<code><html>
<body>
<script>

var keysDown = {};
addEventListener("keydown", function(e) {
    keysDown[e.keyCode] = true;
    document.getElementById('latestKeydown').value=e.keyCode;
}, false);

addEventListener("keyup",function(e){
    delete keysDown[e.keyCode];
}, false);

var loop = function(){
    document.getElementById('upinput').value=keysDown[38];
    document.getElementById('downinput').value=keysDown[40];
    document.getElementById('leftinput').value=keysDown[37];
    document.getElementById('rightinput').value=keysDown[39];
}

setInterval(loop,1);

</script>
Up: <input id="upinput" type=text size=10><br />
Down: <input id="downinput" type=text size=10><br />
Left: <input id="leftinput" type=text size=10><br />
Right: <input id="rightinput" type=text size=10><br />
Recent Keydown: <input id="latestKeydown" type=text size=10><br />

</body>
</html>
</code>

Novamente, a questão é: se eu mantiver pressionado A, então S, então D, então F, então G, você poderá ver a atualização "Keydown Recente" toda vez que eu começar a segurar uma nova chave.

No entanto, se eu segurar a seta para a direita, depois a seta para cima e, em seguida, a seta para a esquerda, não vejo a atualização "Keydown recente" para a tecla de seta para a esquerda.

questionAnswers(1)

yourAnswerToTheQuestion