Javascript: Evento Keydown: tecla de flecha “arriba” para evitar más eventos Keydown con tecla de flecha? (Respondido: fantasma del teclado)
He encontrado muchas preguntas relacionadas (aquí y en otros lugares), pero no he encontrado esta específicamente.
Estoy tratando de escuchar los eventos keydown para las teclas de flecha (37-40), sin embargo, al usar las teclas de flecha en un cierto orden, la flecha subsiguiente no genera eventos "keydown".
Ejemplo:http://blog.pothoven.net/2008/05/keydown-vs-keypress-in-javascript.html
En esa página, haga clic en el cuadro "Escriba aquí ->".Mantenga presionada la tecla de flecha derecha: la tabla se actualiza al código clave 39Mientras continúa presionando la tecla de flecha derecha, presione y mantenga presionada la tecla de flecha hacia arriba: la tabla se actualiza a 38Mientras continúa presionando las teclas de flecha hacia la derecha y hacia arriba, presione y mantenga presionada la tecla de flecha izquierda: tablano actualizarSin embargo, si hago lo mismo pero usandoabajo tecla de flecha en lugar dearriba tecla de flecha entonces funciona como se esperaba.
Además, si uso el teclado en lugar de las teclas de flecha, funciona como se esperaba.
Estoy impidiendo el funcionamiento normal del evento keydown (tanto devolviendo false en el detector de eventos como llamando a preventDefault ()), pero el comportamiento persiste.
Pensé que podría ser mi teclado, pero sucede en una computadora portátil y en la de un amigo.
¿Alguien tiene alguna idea de lo que está pasando? O algunas buenas ideas sobre soluciones?
[editar] Aquí hay un ejemplo de lo que quiero decir. Me doy cuenta de que esto puede no funcionar en todos los navegadores, pero simplemente lo coloqué en mi computadora portátil para demostrar lo que me está pasando (en chrome en w7 y también en chrome y safari en 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>
Una vez más, el problema es: si mantengo presionadas las teclas A, luego S, luego D, luego F, luego G, puede ver la actualización de "Keydown reciente" cada vez que comienzo a mantener una nueva clave.
Sin embargo, si presiono la flecha hacia la derecha, luego la flecha hacia arriba y luego la flecha hacia la izquierda, no veo la actualización de "Reciente Keydown" para la tecla de la flecha hacia la izquierda.