press evento event ejemplo javascript html keyboard keydown onkeydown

evento - keypress html javascript



Javascript: Evento de Keydown: tecla de flecha "Arriba" que previene más eventos Key-Down Key-Key?(respondido: fantasma del teclado) (1)

He encontrado muchas preguntas relacionadas (aquí y en otros lugares), pero no he encontrado esta específicamente.

Estoy tratando de escuchar los eventos de Keydown para las teclas de flecha (37-40), sin embargo, al usar las teclas de flecha en un cierto orden, las flechas siguientes no generan eventos de "keydown".

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

  1. En esa página, haga clic en el cuadro "escriba aquí ->".
  2. Mantenga presionada la tecla de la flecha hacia la derecha: actualizaciones de la tabla al código clave 39
  3. Mientras continúa presionando la tecla de la flecha hacia la derecha, mantenga presionada la tecla de flecha hacia arriba: la tabla se actualiza a 38
  4. Mientras continúa presionando las teclas de flecha hacia arriba y hacia la derecha, mantenga presionada la tecla de la flecha hacia la izquierda: la tabla no se actualiza

Sin embargo, si hago lo mismo pero usando la tecla de flecha hacia abajo en lugar de la tecla de flecha arriba , funciona como se esperaba.

Además, si utilizo el teclado en lugar de las teclas de flecha, funciona como se esperaba.

Estoy impidiendo el funcionamiento normal del evento keydown (tanto al devolver false en el detector de eventos como al invocar preventDefault ()), pero el comportamiento persiste.

Pensé que podría ser mi teclado, pero sucede en una computadora portátil, así como en la máquina de un amigo.

¿Alguien tiene alguna idea de lo que está pasando? ¿O algunas buenas ideas sobre soluciones temporales?

[edit] Aquí hay un ejemplo de lo que quiero decir. Me doy cuenta de que esto puede no funcionar en todos los navegadores, pero acabo de lanzar esto en mi computadora portátil para demostrar lo que está sucediendo para mí (en Chrome en w7 y también en Chrome y Safari en 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>

De nuevo, el problema es: si mantengo presionado A, luego S, luego D, luego F, luego G, puede ver la actualización de "Keydown reciente" cada vez que empiezo a mantener una nueva clave.

Sin embargo, si mantengo presionada la flecha derecha, luego la flecha arriba, luego la flecha izquierda, no veo la actualización "Keydown reciente" para la tecla de flecha izquierda.


No puedo hablar con autoridad sobre esto, pero de acuerdo con https://.com/a/4177260/562209 , a menos que esté trabajando con la pulsación simultánea de una tecla (s) modificadora (s) y una tecla que no sea modificadora, con respecto a un presione varias teclas "la PC podría no entenderlo debido a la forma en que están conectados los teclados".