90 votes

Valeurs de keyCode pour le clavier numérique ?

Les chiffres d'un pavé numérique ont-ils un code différent de celui des chiffres situés en haut d'un clavier ?

Voici du JavaScript qui est censé s'exécuter sur l'événement keyup, mais seulement 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 s'exécute qu'en réponse aux chiffres saisis en haut du clavier, mais pas en réponse aux chiffres saisis à partir du pavé numérique.

Je pense que la réponse doit être que le clavier numérique a des valeurs de keyCode différentes, mais comment puis-je les trouver ?

182voto

Rory McCrossan Points 69838

Les codes clés sont différents. Le clavier 0-9 est le Keycode 96 a 105

Votre if La déclaration devrait être :

if ((e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 96 && e.keyCode <= 105)) { 
  // 0-9 only
}

Voici un guide de référence pour les keycodes


-- UPDATE --

Il s'agit d'une ancienne réponse et keyCode a été déprécié. Il existe désormais d'autres méthodes pour y parvenir, comme l'utilisation de l'option key :

if ((e.key >= 48 && e.key <= 57) || (e.key >= 96 && e.key <= 105)) { 
  // 0-9 only
}

Voici un testeur de sortie pour event.key Merci à @Danziger pour le lien.

25voto

A. Morel Points 1115

******************* Ne pas utiliser KEYCODE ! !!! ******************

Le problème avec keyCode est d'éviter les touches combinées avec les chiffres en haut du clavier, nous devons ajouter une vérification sur la touche "Shift" y "Alt" pour éviter les caractères spéciaux tels que e @ & " { } ...

La solution la plus simple consiste à convertir e.clé en un nombre et vérifiez si la conversion donne NaN !

let key = Number(e.key)
if (isNaN(key) || e.key === null || e.key === ' ') {
  console.log("is not numeric")
}
else {
  console.log("is numeric")
}

Soyez prudent. si e.key est null ou un espace on obtient 0 !

Number(5)         // => 5
Number('5')       // => 5
Number(null)      // => 0 
Number(' ')       // => 0
Number('chars')   // => NaN
Number(undefined) // => NaN

9voto

Zhegan Points 697

Vous pouvez simplement exécuter

$(document).keyup(function(e) {
    console.log(e.keyCode);
});

pour voir les codes des touches pressées dans la console du navigateur.

Ou vous pouvez trouver des codes clés ici : https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#Numpad_keys

6voto

Prashanth Points 51

keyCode est différent pour les chiffres du pavé numérique et les chiffres du haut du clavier.

keyCodes :

chiffres en haut du clavier ( 0 - 9 ) : 48 - 57
les chiffres du clavier numérique ( 0 - 9 ) : 96 - 105

JavaScript condition :

if((e.keyCode >= 48 && e.keyCode <=57) || (e.keyCode >= 96 && e.keyCode <=105)) { 
    // entered key is a number
}

Référence pour tous les keycodes ( avec démo ) : http://www.codeforeach.com/javascript/keycode-for-each-key-and-usage-with-demo

2voto

Jelle Points 651

Pour les personnes qui veulent une solution CTRL+C, CTRL-V, voici la solution :

    /**
     * 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;
    }

Elle utilise la logique de la première réponse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X