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:
-
Est-il sécuritaire de le lire à partir de
e.which
? Je l'utilise parce que les deuxe.keyCode
ete.charCode
retourundefined
dans au moins un navigateur. -
Le système d'exploitation affecte ces codes numériques d'une certaine manière, ou c'est seulement un navigateur trucs?
-
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.
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
Vous devez vous connecter pour publier un commentaire.
Votre code ne fait rien sur ma fin, je dirais donc que ce n'est sans doute dépendent de la disposition du clavier. Une rapide vérification confirme que la sortie sur mon finlandais clavier qwerty est keycode 44, à la place de l'46.
[keyCode, charCode, which]=[0, 44, 44]
avec mon coma clé. Est-ce que votre Finition clavier disposent d'un coma de clé?Keydown: 110,0,110 pour le pavé numérique, 188, 0, 188 normal de la virgule. Dans keypress: 44,44,44 pour les deux pavé numérique et de normal de la virgule
OriginalL'auteur Jani Hartikainen
Normalement dans IE non, vous obtenez seulement
keyCode
(bien que surkeypress
c'est en fait un code de caractère n'est pas une clé de code). Votre code peut lirewhich
parce que derrière les scènes jQuery copies de lakeyCode
valeur danswhich
sur IE. Sans jQuery, vous avez besoin de la propriété renifleurs de code pour savoir lequel choisir. (Vous ne pouvez pas toujours lirekeyCode
surkeypress
car il n'est pas garanti d'être fournis et c'est0
sur Firefox.)Vous ne pouvez pas le faire dans
keypress
, qui ne vous donne qu'un code de caractère (46, ASCII pour.
). Vous auriez plutôt dû au piègekeydown
, qui vous donne accès à un véritable code de la touche (dans lekeyCode
propriété, et aussi dans les navigateurs qui ne sont pas IE, danswhich
).La
keyCode
signalé pour le pavé numérique.
/,
bouton est de 110 (ASCII pour les bas-de-casse N). Sauf sur l'opéra, où l'on en 78, ASCII pour les majuscules N et donc impossible à distinguer d'appuyer sur leN
bouton.De sorte que vous pourriez demander l'
keydown
de l'événement et de stocker un indicateur clé de 110 ou 78 a été d'être enfoncé, puis la revendicationkeypress
. Si le drapeau de la dernièrekeydown
a été réglé et que lewhich
(charCode
) de la propriété est de 46,return false
pour éviter la pression de touche, puis insérez un,
du point de focalisation à la place. (Ce n'est pas très fiable s'il y a plusieurs touches enfoncées simultanément et autorepeat continue, bien.)Noter que l'insertion d'un personnage à l'accent est elle-même non-trivial; voir de nombreuses questions précédentes ici. Vous aurez besoin de ramification code pour IE (
document.selection.createRange().text=...
) et les autres navigateurs modernes (modification de l'entrée duvalue
basé surselectionStart
/selectionEnd
). Les plus âgés et les mobiles ou de niche navigateurs ne peuvent pas soutenir une ou l'autre méthode de montage, afin de détecter l'absence de ces propriétés et de laisser seulement le clavier si vous ne pouvez pas le faire.En général oui, mais pas d'une manière qui aura un effet sur vous ici. Les principaux événements sont en général encore très variable de la croix-navigateur, de la croix-clavier et de la croix-plate-forme; ils sont à éviter si vous le pouvez.
Personnellement, je pense que la bonne solution à une mauvaise disposition du clavier choix comme l'espagnol du point décimal du pavé numérique serait de modifier la mise en page à l'aide de MSKLC.
OriginalL'auteur bobince
Peu de temps après avoir posé cette question, j'ai enfin trouvé un plugin jQuery qui fait exactement cela: pavé numérique-virgule séparateur
OriginalL'auteur Álvaro González