Détecter décimal (point) touche de clavier numérique

J'ai besoin de détecter si l'utilisateur a appuyé le point clé dans le pavé numérique. J'ai écrit ce premier projet qui fonctionne pour moi:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title></title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript"><!--
(function($){
var knownCodes = [
[110, 46], //Firefox, IE, Chrome
[78, 46] //Opera
];
var pressedCodes = [null, null];
$.fn.comma = function(){
this.live("keydown", function(e){
pressedCodes = [e.which, null];
}).live("keypress", function(e){
pressedCodes[1] = e.which;
for(var i=0, len=knownCodes.length; i<len; i++){
if(pressedCodes[0]==knownCodes[i][0] && pressedCodes[1]==knownCodes[i][1]){
$("#log").append("<li>Decimal key detected</li>");
break;
}
}
});
return this;
};
$(function(){
$('<ol id="log"></ol>').appendTo("body");
});
})(jQuery);
jQuery(function($){
$(".comma input:text, .comma textarea").css("border", "1px solid black").comma();
});
//--></script>
</head>
<body>
<form action="" method="get" class="comma" size="20">
<p><input type="text"></p>
<p><textarea rows="3" cols="30"></textarea></p>
</form>
</body>
</html>

Cependant, je ne peux le tester dans un Windows XP boîte avec un clavier espagnol. Mes questions sont les suivantes:

  1. Est-il sécuritaire de le lire à partir de e.which? Je l'utilise parce que les deux e.keyCode et e.charCode retour undefined dans au moins un navigateur.

  2. Le système d'exploitation affecte ces codes numériques d'une certaine manière, ou c'est seulement un navigateur trucs?

  3. De ces codes dépendent de la disposition du clavier?


Info de base: je ne pouvais pas trouver un plugin jQuery pour reconfigurer le clavier numérique donc je suis en train d'écrire mon propre.

Mise à jour

Je vais vous expliquer mon besoin exact. Claviers espagnols qui ont un clavier numérique comportent une . clé. Cependant, le séparateur décimal en espagnol est ,. Qui fait que c'est gênant pour taper les chiffres dans les applications web. Certaines applications de bureau telles que MS Excel reconfigurer cette touche pour insérer une virgule. Je suis en train de l'imiter.

J'ai adapté un petit script que j'ai utilisé pour le poster ici. Voilà comment j'ai obtenu les valeurs de la knownCodes tableaux:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title></title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript"><!--
(function($){
$.fn.showKeyCodes = function(){
var log = function(e){
$("<li></li>").text(e.type + "(): [keyCode, charCode, which]=[" + e.keyCode + ", " + e.charCode + ", " + e.which + "]").appendTo("#log");
}
this.live("keydown", function(e){
log(e);
}).live("keypress", function(e){
log(e);
}).live("keyup", function(e){
log(e);
});
return this;
};
$(function(){
$('<ol id="log"></ol>').appendTo("body");
});
})(jQuery);
jQuery(function($){
$(".showKeyCodes input:text, .showKeyCodes textarea").css("border", "1px solid black").showKeyCodes();
});
//--></script>
</head>
<body>
<form action="" method="get" class="showKeyCodes" size="20">
<p><input type="text"></p>
<p><textarea rows="3" cols="30"></textarea></p>
</form>
</body>
</html>

Type de la . clé dans votre pavé numérique (ou tout ce qui touche le remplace à la disposition de votre clavier) et la touche qui correspond à la même chose dans le caractère alphabétique du clavier. L'objectif est de détecter que vous avez cliqué sur le premier et pas le second.

Note de côté: j'espère que vous n'avez pas besoin de cette clé pour faire des choses, que mon clavier n'a pas de pavé numérique 🙂 apple.com/keyboard
Je veux insérer un coma, ce qui est le séparateur décimal valide en espagnol. Si vous ne disposez pas d'un clavier, vous n'avez pas le problème, je vais essayer de les corriger 🙂

OriginalL'auteur | 2010-07-13