IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

KeyCode + String.fromCharCode


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 37
    Points : 25
    Points
    25
    Par défaut KeyCode + String.fromCharCode
    Bonjour,

    Le but du code que j'essaie de mettre en place et de contrôler la saisie de chiffre dans un champ texte. A partir des bouts de code que j'ai pu trouver dans les différentes FAQ et les différents forums, je construit moi-même ma fonction afin de permettre à l'utilisateur de saisir :
    - les chiffres sur le pavé numérique
    - les chiffres sur le clavier avec appuie sur Shift (gestion des portables)
    - touches de navigation + tab + del + qq autres touches...

    Je trouve donc la correspondance entre le KeyCode et les différentes touches que je veux autoriser.

    => je récupère la touche saisie par l'utilisateur
    (sur les evenements keydown et keyup)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input text .... onkeydown='f_ctrl_chiffre(event) onkeyup='f_ctrl_chiffre(event)'....>
    => je teste ma touche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function f_ctrl_chiffre(evt)
    {
       var touche = window.event ? evt.keyCode : evt.which;
       alert('touche code=' + touche + ' car=' String.fromCharCode(touche));
    }

    Le problème est que la fonction String.fromCharCode ne me retourne pas le caractère attendu. En effet, pour le KeyCode = 100, je devrais avoir le caractère 4, puisque cela correspond à la touche pavé numérique 4.
    Or la fonction, me retourne le caractère d.

    Je ne comprends pas ce qui cloche...

    D'avance merci de votre aide.

    Alex.

  2. #2
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    Salut,
    est-ce que cela ne serait pas plus simple de tester !isNaN(inputText.value)
    et de supprimer le dernier caractère ?

    Pour info 100 c'est le code ASCII de 'd'
    Il faudrait aussi gérer le copier/coller.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 37
    Points : 25
    Points
    25
    Par défaut
    Hello,

    En fait le but final de l'opération et de faire un cumul dans un tableau, en temps réel, à chaque fois que l'utilisateur modifie un des montants utilisés pour faire la somme...

    Le problème c'est que en l'état, la saisie au pavé numérique me renvoie true sur le isNan (=> l'origine du problème : je ne présentait que la conclusion de mes investigations...). Du coup, je considérais que la saisie n'était pas valide... Je ne pense pas que les utilisateurs apprécient le faut d'avoir un message du genre "seule la saisie de chiffres est autorisée" alors qu'ils viennent de saisir un chiffre sur le pavé numérique...

    D'après toi, ma fonction récupère donc le code ascii de la saisie au clavier.
    Existe-t-il alors une fonction JS qui permette de transformer ce code ascii en code unicode de manière à pouvoir l'appliquer avant de passer par la fonction String.fromCharCode.

    Le résultat ressemblerait à cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var car = String.fromCharCode(fonction_JS_ASCII_en_UNICODE(touche))
    D'avance merci.

  4. #4
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    Tu veux faire quoi si l'utilisateur tape un caractère non numérique ? Lui afficher une alerte ?
    Si oui, je ne comprends pas pourquoi tu passes par les keyCode ? isNaN() et inputText.value suffisent non ?
    Sinon tu peux créer la fonction de conversion à la main :

    keyCode
    0 à 9
    48 = 0
    ...
    57 = 9

    0 à 9 du pavé
    98 = 0
    ...
    105 = 9

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 37
    Points : 25
    Points
    25
    Par défaut
    En fait je voulais simplement rendre "inactive" les autres touches (pas de message)... Mais je viens de me rendre compte, que le keyCode renvoyé par onkeypress est different de celui renvoyé par onkeyup !!!
    Un autre problème ce sont les chiffres du clavier => le keyCode renvoyé est identique que la tocuhe <Maj> soit active ou non. Du coup, impossible de distinguer le 3 du ". Sachant qu'en plus, l'application est egalement utilise par des pc portables où la touche n'a pas besoin d'être active pour saisir les chiffres et l'on arrive vite à un problème sans solution. Du coup, je fais juste les contrôles sur le keypress et je ferai des tests plus complets lors de la validation...(à cause du copier/coller...) sauf s'il existe une solution pour empecher la manip...
    Mais merci pour votre aide.

  6. #6
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    Tu peux aussi supprimer les caractères non numériques, t'as juste besoin du onKeyUp, ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var globalRegEx = new RegExp("([^0-9])+", "g");
    function numFilter(input)	{
    	input.value = input.value.replace(globalRegEx,"");
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. string to KeyCode pour la class Robot
    Par kwak300 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 05/06/2009, 08h56
  2. [2.0][C#] Equivalent de String.fromCharCode ?
    Par externe dans le forum C#
    Réponses: 5
    Dernier message: 20/11/2006, 21h44
  3. URGENT: retour de string
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 15/07/2002, 09h47
  4. Réponses: 2
    Dernier message: 05/06/2002, 12h29
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo