2010-10-07 7 views
15

J'ai donc vu sur certains forums des messages sur différents navigateurs rapportant differenct keyCodes, mais tout le monde semble donc éviter le "pourquoi?". J'essayais de capturer le deux-points (:) keyCode et j'ai réalisé que Firefox rapportait e.keyCode 56. Alors que Chrome rapporte 186 (je pense que c'était ce que c'était).Javascript: différents keyCodes sur différents navigateurs?

Existe-t-il un moyen universel d'obtenir le bon code de clé dans tous les navigateurs?

Et pourquoi sont-ils différents si ce sont les mêmes clés?

Je serais plus curieux de savoir s'il existe une manière internationale d'obtenir la même touche.

Merci.

+0

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

+1

@galambalazs, ce graphique ne tient pas compte du colon et du point-virgule. Ce qui me surprend. PPK est généralement au-dessus de ce genre de chose. –

+0

http://unixpapa.com/js/key.html a le côlon et le point-virgule, et semble assez exhaustive. – ruffin

Répondre

11

Voir http://unixpapa.com/js/key.html pour une explication de la raison pour laquelle ils ont des clés différentes. Je ne connais pas de manière internationale de faire correspondre les clés.

+1

La partie conclusion du lien que j'ai inclus contient des informations susceptibles de vous aider à mettre en œuvre une solution universelle - tout dépend de votre situation. –

+0

Bel article avec lequel vous m'avez lié. –

11

Cela dépend si vous êtes intéressé par la touche physique que l'utilisateur a appuyée ou par le caractère tapé par l'utilisateur. Si c'est le caractère que vous recherchez, vous pouvez l'obtenir de manière fiable dans tous les principaux navigateurs (en utilisant la propriété which de l'événement dans la plupart des navigateurs ou keyCode dans IE < = 8), mais uniquement dans l'événement keypress. Si vous recherchez la clé, utilisez l'événement keydown ou keyup et examinez la propriété keyCode, bien que les mappages de codes-clés diffèrent quelque peu entre les navigateurs.

Une excellente explication et une référence pour tous les événements liés à la clé JavaScript peuvent être trouvées au http://unixpapa.com/js/key.html.

Pour détecter l'utilisateur en tapant un caractère de deux points de manière fiable dans tous les principaux navigateurs, vous pouvez effectuer les opérations suivantes:

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! = KeyCode, sauf pour/[A-Z 0-9]/ –

+0

@NathanBubna: Je sais. Cependant, dans l'ancien événement keypress de IE, keyCode est confusément le code de caractère, pas un code de clé, et tous les autres navigateurs principaux supportent 'which', donc' keyCode' est seulement utilisé dans l'ancien IE. Lisez tout à ce sujet à http://unixpapa.com/js/key.html (comme lié à dans ma réponse). –

+0

Ick. Vieux IE frappe à nouveau. Merci pour l'explication! –

0

Je pense que vous devriez faire JavaScript pour obtenir le code d'activation du caractère « : », donc le script saura ce que c'est dans un certain environnement. Une question similaire a été posée here, in stackoverflow.

1

Ceci est une vieille question. La façon moderne de le faire est d'utiliser event.key. Voir

+1

Ceci est toujours la façon actuelle, compte tenu de Key est toujours à l'état de projet et non pris en charge sur la plupart des navigateurs mobiles http://caniuse.com/#feat=keyboardevent-key –

+0

vous conviennent, ce n'est pas très loin. Il est à noter que le navigateur mobile le plus populaire et de loin, Chrome pour Android a un support complet. Les plus gros problèmes sont iOS et Safari, bien que le support de Safaris arrive dans la prochaine version. Je recommanderais d'utiliser l'un des nombreux polyfills disponibles. – kidconcept

+0

En fait, vous pouvez l'utiliser. Il est pris en charge pour les navigateurs les plus utilisés. (http://caniuse.com/#feat=keyboardevent-key) Si la propriété n'est pas définie, vous pouvez toujours utiliser une petite fonction de repli. – CodeBrauer

Questions connexes