Javascript: Keydown Event: „Strzałka w górę” zapobiegająca dalszym wydarzeniom Keydown z klawiszami strzałek? (odpowiedział: ghosting klawiatury)

Znalazłem wiele powiązanych pytań (tutaj i gdzie indziej), ale nie znalazłem tego konkretnie.

Próbuję nasłuchiwać zdarzeń keydown dla klawiszy strzałek (37-40), jednak gdy używasz klawiszy strzałek w określonej kolejności, kolejna strzałka nie generuje zdarzeń „keydown”.

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

Na tej stronie kliknij pole „wpisz tutaj ->”.Naciśnij i przytrzymaj prawy klawisz strzałki: aktualizacje tabeli do kodu 39Przytrzymując prawy klawisz strzałki, naciśnij i przytrzymaj klawisz strzałki: aktualizacje tabeli do 38Przytrzymując klawisze strzałek w prawo iw górę, naciśnij i przytrzymaj klawisz strzałki w lewo: tabelanie aktualizacja

Jeśli jednak zrobię to samo, ale użyjęna dół klawisz strzałki zamiastw górę klawisz strzałki to działa zgodnie z oczekiwaniami.

Dodatkowo, jeśli użyję klawiatury zamiast klawiszy strzałek, działa zgodnie z oczekiwaniami.

Blokuję normalne działanie zdarzenia keydown (zarówno przez zwrócenie wartości false w detektorze zdarzeń, jak i wywołanie metody preventDefault ()), ale zachowanie się utrzymuje.

Myślałem, że to może być moja klawiatura, ale dzieje się to zarówno na laptopie, jak i na komputerze przyjaciela.

Czy ktoś ma wgląd w to, co się dzieje? Lub kilka dobrych pomysłów na obejścia?

[edit] Oto przykład tego, co mam na myśli. Zdaję sobie sprawę, że może to nie działać na wszystkich przeglądarkach, ale po prostu rzuciłem to razem na moim laptopie, aby zademonstrować, co się dzieje dla mnie (w chrome na w7, a także chrome i safari na 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>

Ponownie, problem polega na tym, że: Jeśli przytrzymam A, następnie S, następnie D, następnie F, a następnie G, zobaczysz aktualizację „Ostatnie Keydown” za każdym razem, gdy zacznę trzymać nowy klucz.

Jeśli jednak przytrzymam strzałkę w prawo, następnie strzałkę w górę, a następnie strzałkę w lewo, nie zobaczę aktualizacji „Ostatnie Keydown” dla klawisza ze strzałką w lewo.

questionAnswers(1)

yourAnswerToTheQuestion