Probablemente este sea el comportamiento previsto o al menos no un problema de jQuery/js, pero me gustaría aclarar si es que hay alguna.jQuery keypress event se activa repetidamente cuando se mantiene la clave, pero no en todas las teclas
tome las siguientes:
$(document).bind('keypress', function(e){
switch(e.keyCode)
{
case 37:
console.log('left cursor keydown, will fire on hold');
break;
case 39:
console.log('right cursor keydown, will fire on hold');
break;
case 80:
console.log('p will only fire once per press!');
break;
}
});
También se puede jugar con el ejemplo de la documentación de jQuery: http://api.jquery.com/keypress/
Cuando se presiona un cursor izquierda o hacia la derecha (o muchas otras teclas como A,E,[,
etc), el evento se dispara y obtienes un buen mensaje de registro en la consola. Todo bien & según lo previsto. Sin embargo, ahora intente mantener presionada la tecla; después de una breve pausa, verá que el evento de pulsación se dispara varias veces cuando mantiene presionada la tecla; sin embargo, si intenta presionar un p
(o, por ejemplo, un j
), solo se disparará. una vez.
Estoy probando esto usando FF 9.0.1 y mac OSX 10.7.1 y jQuery 1.7.1.
¿Es esto por diseño, es una función dependiente del navegador, o tiene que ver con el sistema operativo, o incluso el teclado mismo? ¿Alguien ha recibido una lista de llaves que se repetirán y otras que no?
Por lo que respecta al caso de uso, realmente no hay uno, esto acaba de aparecer cuando estaba vinculando una animación a una pulsación del cursor y empecé a ver un comportamiento extraño cuando se presionó la tecla. Mi solución fue utilizar el evento keyup()
en su lugar, y preventDefault()
en el evento keydown()
para las claves en las que estaba instendida, para evitar que los cursores se desplacen por la pantalla.
ACTUALIZACIÓN: Parece que en el evento de pulsación de tecla, keyCode es siempre 0
para la mayoría de las letras, que podría tener algo que ver con la razón pensé que el controlador sólo disparó una vez. Después de algunas pruebas más veo las entradas de registro repetidas como los cursores. Si se comprueba la página de la API jQuery sin embargo, y utiliza la demostración de que, exhibe el comportamiento que estaba describiendo: http://api.jquery.com/keypress/
Todavía no se puede explicar que a mí mismo:/
Todas las teclas se repiten. Debe agregar 'break''s al final de cada caso del interruptor, a menos que los haya dejado intencionalmente. O bien tu teclado está funcionando mal, o tu código simplemente necesita 'break''s. –
No es para mí - "p" se repite muy bien. Creo que es una función del hardware/firmware de tu teclado. – Pointy
@BrianGraham acaba de descubrir eso, gracias :) después de probar esto de nuevo en jsfiddle, estoy viendo una repetición en todas las teclas también; sin embargo, el código clave attr es 0 en la mayoría de las teclas para el evento de pulsación de tecla, lo que explicaría algunos de los comportamientos estaba viendo – jammypeach