Les numéros sur un pavé numérique ont-ils un code de touche différent de celui situé en haut du clavier?
Voici du code JavaScript censé s'exécuter sur l'événement keyup, mais uniquement si le code clé est compris entre 48 et 57. Voici le code:
$('#rollNum').keyup(function(e) {
if(e.keyCode >= 48 && e.keyCode <= 57) { //0-9 only
var max = 15;
var textLen = $(this).val().length;
var textLeft = max - textLen;
. . .
Mon problème est que ce code ne fonctionne qu'en réponse aux nombres entrés en haut du clavier, mais ne s'exécute pas en réponse à des chiffres entrés à partir du pavé numérique.
Je pense que la réponse doit être que le pavé numérique a différentes valeurs de keyCode, mais comment puis-je savoir quelles sont ces valeurs?
Les keycodes sont différents. Le clavier 0-9 est Keycode 96
à 105
Votre déclaration if
devrait être:
if ((e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 96 && e.keyCode <= 105)) {
// 0-9 only
}
******************* ne pas utiliser KEYCODE !!!! *************** ***
Le problème avec keyCode est d’éviter les touches combinées avec les chiffres au-dessus du clavier, nous devons ajouter une vérification sur la touche "Shift" et "Alt " pour éviter des caractères spéciaux tels que e @ &" {} ...
Une solution simple consiste à convertir e.key en un nombre et à vérifier si la conversion donne NaN!
let key = Number(e.key)
if (isNaN(key) || e.key===null) {
console.log("is not numeric")
}
else {
console.log("is numeric")
}
Attention si e.key est null, cela donne !
Number(5) // => 5
Number('5') // => 5
Number(null) // => 0
Number('chars') // => NaN
Number(undefined) // => NaN
Vous pouvez simplement courir
$(document).keyup(function(e) {
console.log(e.keyCode);
});
pour voir les codes des touches enfoncées dans la console du navigateur.
Ou vous pouvez trouver les codes de clé ici: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#Numpad_keys
keyCode est différent pour les chiffres sur le pavé numérique et les chiffres sur le dessus du clavier.
keyCodes:
chiffres en haut du clavier (0 - 9): 48 - 57
chiffres sur le pavé numérique (0 - 9): 96 - 105
Condition JavaScript:
if((e.keyCode >= 48 && e.keyCode <=57) || (e.keyCode >= 96 && e.keyCode <=105)) {
// entered key is a number
}
Référence pour tous les codes de touche (avec démo): http://www.codeforeach.com/javascript/keycode-for-each-key-and-usage-with-demo
Pour les personnes qui souhaitent une solution CTRL + C, CTRL-V, voici ce que vous devez faire:
/**
* Retrieves the number that was pressed on the keyboard.
*
* @param {Event} event The keypress event containing the keyCode.
* @returns {number|null} a number between 0-9 that was pressed. Returns null if there was no numeric key pressed.
*/
function getNumberFromKeyEvent(event) {
if (event.keyCode >= 96 && event.keyCode <= 105) {
return event.keyCode - 96;
} else if (event.keyCode >= 48 && event.keyCode <= 57) {
return event.keyCode - 48;
}
return null;
}
Il utilise la logique de la première réponse.
La réponse de @ .A. Je trouve que Morel est la meilleure solution facile à comprendre avec un faible encombrement. Je voulais juste ajouter en plus si vous voulez un montant de code inférieur à cette solution qui est une modification de Morel fonctionne bien pour ne pas autoriser les lettres de toute sorte, y compris les entrées notoires "e" caractère.
function InputTypeNumberDissallowAllCharactersExceptNumeric() {
let key = Number(inputEvent.key);
return !isNaN(key);
}
Pour ajouter à certaines des autres réponses, notez que:
keyup
et keydown
diffèrent de keypress
String.fromCharCode()
pour obtenir le chiffre réel de keyup
, vous devez d'abord normaliser le keyCode
.Vous trouverez ci-dessous un exemple auto-documenté qui détermine si la clé est numérique, ainsi que son numéro (cet exemple utilise la fonction range
de lodash
).
const isKeypad = range(96, 106).includes(keyCode);
const normalizedKeyCode = isKeypad ? keyCode - 48 : keyCode;
const isDigit = range(48, 58).includes(normalizedKeyCode);
const digit = String.fromCharCode(normalizedKeyCode);