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 :

Verification sur l'évènement KeyDown


Sujet :

JavaScript

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2010
    Messages : 86
    Points : 75
    Points
    75
    Par défaut Verification sur l'évènement KeyDown
    Bonjour tout le monde,

    Je travaille en ce moment sur un morceau de code JS qui me donne du fil à retordre ! J'utilise plein de TextBox dans un contexte de simulation d'Excel et j'applique via l'évènement keyDown un masque de saisie que j'ai customisé afin de laisser une certaines souplesse dans la saisie mais également être sur que dans ce qu'ils saisissent il ne puisse y avoir une erreur. Voila ce que le masque est censer faire :

    - Autoriser le "-" uniquement si c'est le premier caractère
    - Possibilité de mettre uniquement du numérique (0-9)
    - Possibilité de mettre uniquement une seul ","
    - Une fois la "," mise impossible de mettre plus de 2 chiffres numériques

    Actuellement tout fonctionne SAUF (et c'est la ou vous intervenez) la "," je peux mettre par exemple : 15,,, ou 15,,3 ou 1,5, voire tout simplement ,,,

    Voici donc le code que j'utilise et si vous trouvez le problème je vous serais infiniment reconnaissant (Le soucis se situe donc au niveau du isOnceDecimalSeparator )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    var obj = document.getElementById(s.name + '_I');
     
        var valeur = obj.value;
     
        var reg = new RegExp('[\.|,]','g');
     
        var reg2 = new RegExp('[\-]', '');
     
        var keyCode = ('which' in e.htmlEvent) ? e.htmlEvent.which : e.htmlEvent.keyCode;
     
        var isNumeric = ( (keyCode >= 65 && keyCode < 91) || ( 47<keyCode && keyCode<58 && keyCode != 54 && e.htmlEvent.shiftKey==false) );
     
        var isOnceDecimalSeparator = ( (keyCode == 110 || keyCode == 188) && (valeur.length <= 0 || reg.test(valeur)) ) ;        
     
        var isNegChar = (keyCode == 109 || keyCode == 54);
     
        if (keyCode >= 37 && keyCode <= 40)
        {
    		return;
        }
     
        if (keyCode == 221)
        {    
    		e.htmlEvent.returnValue = false;
    		return;
        }
     
        if (isNumeric)
        {    
            e.htmlEvent.returnValue = false;
            return;
        }
     
        if ( isOnceDecimalSeparator )
        {
            e.htmlEvent.returnValue = false;
            return;
        }
     
        if ( isNegChar )
        {
             if (valeur.length > 0 && reg2.test(valeur))
             {
                e.htmlEvent.returnValue = false;
                return;  
    		}
        }
    Je vous remercie par avance pour l'aide que vous m'apporterez !

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    je n'ai pas regardé en profondeur mais n'oublie pas de reinitialiser le pointeur de la regexp sinon tu auras le fameux souci du "une fois sur deux"...

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2010
    Messages : 86
    Points : 75
    Points
    75
    Par défaut
    Je ferais attention à ca effectivement mais ce n'est pas mes RegExp le problème (a priorie du moins).

    Ce que je peux rajouter que je n'ai pas dit dans mon premier topic c'est que lorsque je rentre dans OneDecimalSeparator, contrairement aux autres bloc if, le returnValue=False; ne fait rien du tout alors je me suis demander si la touche "," avait besoin d'un traitement spécial, mais je n'ai absolument pas trouver de réponse pour ca !

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2010
    Messages : 86
    Points : 75
    Points
    75
    Par défaut
    Bonjour,

    Je me permet de ré-écrire un post car je n'ai pas encore trouvé ma solution et que j'ai d'autre élements à apporter à l'enquête

    Ce problème de ',' ne se produit que sous (tenez vous bien) FireFox ! Sous IE6 IE7 IE8 IE9 cela fonctionne et sont Chrome également C'est bien la première fois que ca marche dans se sens la ! Je dois dire que je suis sur le cul là ^^

    Ma version de FF est la 6.0 et je n'ai pas l'occasion de pouvoir tester sur les versions antérieur a FF !

    Des idées ?

Discussions similaires

  1. Envoyer un son sur un évènement...
    Par lyten dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 01/03/2006, 16h16
  2. Réponses: 10
    Dernier message: 23/11/2005, 21h20
  3. envoyer un formulaire sur un évènement onchange.
    Par maniaco_jazz dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/11/2005, 14h44
  4. [débutant] test sur un évènement
    Par heider dans le forum Langage
    Réponses: 4
    Dernier message: 07/10/2005, 00h44
  5. Condition sur un événement
    Par kobe dans le forum Langage
    Réponses: 2
    Dernier message: 11/07/2005, 10h17

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