Javascript: Keydown-Ereignis: "Auf" -Pfeiltaste verhindert weitere Keydown-Ereignisse? (Beantwortet: Keyboard Ghosting)

Ich habe viele verwandte Fragen gefunden (hier und anderswo), aber diese nicht speziell gefunden.

Ich versuche, auf Tastendruckereignisse für die Pfeiltasten (37-40) zu warten, aber wenn Sie die Pfeiltasten in einer bestimmten Reihenfolge verwenden, erzeugen nachfolgende Pfeile keine "Tastendruckereignisse".

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

Klicken Sie auf dieser Seite in das Feld "Hier eingeben ->".Halten Sie die rechte Pfeiltaste gedrückt: Die Tabelle wird auf den Schlüsselcode 39 aktualisiertHalten Sie die rechte Pfeiltaste gedrückt und halten Sie die Pfeiltaste gedrückt: Die Tabelle wird auf 38 aktualisiertHalten Sie die Pfeiltasten nach rechts und nach oben gedrückt, und drücken Sie gleichzeitig die Pfeiltaste nach links: Tabellenicht aktualisieren

Allerdings, wenn ich das gleiche mache, aber mitNieder Pfeiltaste stattoben pfeiltaste dann funktioniert es wie erwartet.

Wenn ich statt der Pfeiltasten das Tastenfeld verwende, funktioniert es außerdem wie erwartet.

Ich verhindere den normalen Betrieb des keydown-Ereignisses (sowohl durch Zurückgeben von false im Ereignis-Listener als auch durch Aufrufen von preventDefault ()), aber das Verhalten bleibt bestehen.

Ich dachte, es könnte meine Tastatur sein, aber es passiert sowohl auf einem Laptop als auch auf der Maschine eines Freundes.

Hat jemand einen Einblick, was los ist? Oder einige gute Ideen zur Problemumgehung?

[edit] Hier ist ein Beispiel für das, was ich meine. Ich stelle fest, dass dies möglicherweise nicht bei allen Browsern funktioniert, aber ich habe dies auf meinem Laptop zusammengefasst, um zu demonstrieren, was mit mir passiert (auf Chrome auf W7 und auch Chrome & Safari auf 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>

Auch hier ist das Problem: Wenn ich A, dann S, dann D, dann F, dann G gedrückt halte, wird der "Recent Keydown" jedes Mal aktualisiert, wenn ich anfange, einen neuen Schlüssel zu halten.

Wenn ich jedoch den Rechtspfeil, den Aufwärtspfeil und den Linkspfeil gedrückt halte, wird die Aktualisierung von "Recent Keydown" für die Linkspfeiltaste nicht angezeigt.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage