2010-10-07 18 views
15

Así que he visto algunas publicaciones de foros sobre diferentes navegadores que informan diferentes KeyCodes, pero parece que todos evitan el "¿por qué?".Javascript: ¿diferentes códigos de tecla en diferentes navegadores?

Estaba tratando de capturar los dos puntos (:) keyCode y me di cuenta de que Firefox informa de nuevo e.keyCode 56. Mientras que Chrome informa 186 (creo que eso era).

¿Existe alguna manera univeral de obtener el código de clave correcto en todos los navegadores?

¿Y por qué son diferentes si son las mismas llaves?

Sería más curioso si hay una forma internacional de obtener la misma pulsación de tecla.

Gracias.

+0

http://www.quirksmode.org/js/keys.html – galambalazs

+1

@galambalazs, este cuadro no representa el colon y el punto y coma. Lo cual me sorprende. PPK suele estar al tanto de ese tipo de cosas. –

+0

http://unixpapa.com/js/key.html tiene el colon y el punto y coma, y ​​parece bastante exhaustivo. – ruffin

Respuesta

11

Consulte http://unixpapa.com/js/key.html para obtener una explicación de por qué tienen claves diferentes. No conozco una forma internacional de unir llaves.

+1

La parte de conclusión del enlace que he incluido contiene cierta información que puede ayudarlo a implementar una solución universal; solo depende de su situación. –

+0

Buen artículo que me vinculó. –

11

Depende de si está interesado en qué tecla física ha pulsado el usuario o qué carácter ha escrito el usuario. Si es el personaje que busca, puede obtenerlo de manera confiable en todos los navegadores principales (usando la propiedad keypress del evento which en la mayoría de los navegadores o keyCode en IE < = 8), pero solo en el evento keypress. Si busca la clave, use el evento keydown o keyup y examine la propiedad keyCode, aunque las asignaciones exactas de códigos de tecla difieren un tanto entre los navegadores.

Puede encontrar una excelente explicación y referencia para todos los eventos relacionados con las claves de JavaScript en http://unixpapa.com/js/key.html.

Para detectar el usuario escribe un carácter de dos puntos de forma fiable en todos los principales navegadores, se puede hacer lo siguiente:

document.onkeypress = function(e) { 
    e = e || window.event; 
    var charCode = (typeof e.which == "number") ? e.which : e.keyCode; 
    if (charCode && String.fromCharCode(charCode) == ":") { 
     alert("Colon!"); 
    } 
}; 
+0

charCode! = Código clave, excepto para/[A-Z 0-9]/ –

+0

@NathanBubna: Lo sé. Sin embargo, en el evento 'keypress' de IE anterior,' keyCode' confusamente * es * el código de carácter, no un código de tecla, y todos los demás navegadores mainstream admiten 'which', por lo que' keyCode' solo se usa en IE antiguo. Lea todo al respecto en http://unixpapa.com/js/key.html (como se relacionó en mi respuesta). –

+0

Ick. El viejo IE ataca de nuevo. ¡Gracias por la explicación! –

0

Creo que deberías hacer JavaScript para obtener el código clave de la ':' carácter, por lo el script sabrá qué es en un cierto entorno. Se hizo una pregunta similar here, in stackoverflow.

1

Esta es una pregunta anterior. La forma moderna de hacerlo es use event.key. Ver MDN Key

+1

Esta sigue siendo la forma actual, considerando que Key aún está en borrador y no es compatible con la mayoría de los navegadores móviles http://caniuse.com/#feat=keyboardevent-key –

+0

se adapte a usted, no está muy lejos. Vale la pena señalar que el navegador móvil más popular y lejano, Chrome para Android tiene soporte completo. Los mayores problemas son iOS y Safari, aunque el soporte de Safaris viene en la próxima versión. Yo recomendaría usar uno de los muchos polyfills disponibles. – kidconcept

+0

En realidad, puedes usarlo. Es compatible con la mayoría de los navegadores usados. (http://caniuse.com/#feat=keyboardevent-key) Si la propiedad no está definida, aún puede usar una pequeña función de respaldo. – CodeBrauer

Cuestiones relacionadas