Ho trovato molte domande correlate (qui e altrove), ma non ho trovato questo in particolare.Javascript: Evento Keydown: tasto freccia "Su" che impedisce ulteriori eventi Keydown con i tasti freccia? (risposta: tastiera fantasma)
Sto cercando di ascoltare gli eventi di keydown per i tasti freccia (37-40), tuttavia quando si utilizzano i tasti freccia in un determinato ordine, la freccia successiva non genera eventi "keydown".
Esempio: http://blog.pothoven.net/2008/05/keydown-vs-keypress-in-javascript.html
- In quella pagina, fare clic nella "tipo qui ->" scatola.
- Tenere premuto il tasto freccia destra: aggiornamenti della tabella di KeyCode 39
- Continuando a tenere freccia destra sulla, tenere premuto il tasto freccia: aggiornamenti della tabella a 38
- Mentre si continua a tenere i tasti freccia destra e su, premere e tenere premuto tasto freccia sinistra: tavolo non si aggiornamento
Tuttavia, se faccio la stessa cosa ma con giù freccia invece di fino freccia allora funziona come previsto.
Inoltre, se utilizzo la tastiera anziché i tasti freccia, funziona come previsto.
Sto impedendo il normale funzionamento dell'evento keydown (restituendo entrambi false nel listener di eventi e chiamando preventDefault()), ma il comportamento persiste.
Ho pensato che potesse essere la mia tastiera, ma succede su un laptop e su un computer di un amico.
Qualcuno ha qualche idea di cosa sta succedendo? O qualche buona idea su soluzioni alternative?
[modifica] Ecco un esempio di cosa intendo. Mi rendo conto che questo potrebbe non funzionare su tutti i browser, ma ho appena buttato questo insieme sul mio portatile per dimostrare ciò che sta accadendo per me (su Chrome su W7 e anche cromo & Safari su Mac OS 10.6.8)
<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>
Di nuovo, il problema è: Se tengo premuto A, poi S, poi D, poi F, poi G, puoi vedere il "recente keydown" che si aggiorna ogni volta che inizio a tenere una nuova chiave.
Tuttavia, se tengo premuto la freccia destra, quindi la freccia su, quindi la freccia sinistra, non vedo l'aggiornamento "Recent Keydown" per il tasto freccia sinistra.
In attesa di alcune righe di codice. –
Benvenuti in Stack Overflow! –
* "... il PC potrebbe non capirlo a causa del modo in cui le tastiere sono cablate" * oO –