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 :

Restriction textfield - numérique seulement


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 32
    Points : 29
    Points
    29
    Par défaut Restriction textfield - numérique seulement
    Bonjour à tous!

    J'ai un problème avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var unNombre = /^[0-9.]$/;
     //N.B: Ajouter la vérification de chacuns des champs à cette boucle. NaN notament 
    for(compteur = colonne ; compteur <= champsMax ; compteur=compteur+4){
     if(unNombre.exec(window.document.getElementById("Text" + compteur).value = null){
    window.document.getElementById("Text" + compteur).style.color = "red";
    bAlert = true; alert("lala"); }
     else { 
      total += parseFloat(window.document.getElementById("Text" + compteur).value); 
      window.document.getElementById("Text" + compteur).style.color = "red"; } }
    Comme vous pouvez le voir, j'essais d'incorporer une vérification si les caractères à l'intérieur des textfield sont compris entre 0 et 9 ou '.'

    Toutefois, même en inscrivant 'crève test javascript", ça n'embarque pas dans la condition. Pourtant, j'ai toujours utilisé la même syntaxe que dans mes pages précédentes et là, j'ai un problème car je ne peut aller valider mes champs comme ça...

    Merci d'avance,
    Ben

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 32
    Points : 29
    Points
    29
    Par défaut
    en passant, je n'ai pas accès à 'onkeypress='

  3. #3
    Rédacteur
    Avatar de MasterOfChakhaL
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    2 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 147
    Points : 3 264
    Points
    3 264
    Par défaut
    Si tu testes en utilsant parseFloat, il te renverra Nan si ce n'est pas un chiffre

    Je crois que ca te suffirais.
    Pas la peine de sortir une regex juste pour un nombre non?
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    N'oubliez pas de cliquer sur quand votre question à trouvé une solution.

    Si vous n'avez pas encore lu les règles du club, mieux vaut tard que jamais!

  4. #4
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    bref, le sujet est traité toutes les semaines...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function check(n){
    if(isNaN(n)){
    alert("saisissez un nombre!")
    }
    }
     
     
    <p>
    <input type="text" onchange="check(this.value)" />
    </p>

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 32
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par javatwister
    bref, le sujet est traité toutes les semaines...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function check(n){
    if(isNaN(n)){
    alert("saisissez un nombre!")
    }
    }
     
     
    <p>
    <input type="text" onchange="check(this.value)" />
    </p>
    Bon, j'ai pas mal tout essayé, mais en vain. La logique que vous m'avez donner fonctionne bien selon moi. Toutefois, lorsque viens le temps de l'implémenter, la patate me saute au visage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for(compteur = colonne ; compteur <= champsMax ; compteur=compteur+4){
      if(isNaN(parseFloat(window.document.getElementById("Text" + compteur).value))){ 
       window.document.getElementById("Text" + compteur).style.color = "red";
      }
     else{
       total += parseFloat(window.document.getElementById("Text" + compteur).value);
      }
    }
    Tout ça me donne des erreurs sans bon sens. Du style ')' manquant à la ligne 500 alors que cette ligne comporte uniquement du htm...

  6. #6
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    en faisant un truc comme ça, tu les gère comme tu veux
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    <html>
    <head>
    <title>My field is rich</title>
        <script type="text/javascript">
            var infos = new Array();
            infos["numField"] = {isDec:true,nbDec:2};
            infos["numField2"] = {isDec:false,nbDec:0};
     
            function setNumeric(fieldId){
                document.getElementById(fieldId).onkeypress = function(e){
                    var keyCode;
                    if(!e){
                        e = window.event;    
                        keyCode = e.keyCode
                    }
                    else{
                        keyCode = e.charCode;
                        if(keyCode == 0)
                            return;
                    }
                    var dec = infos[this.id].isDec;
                    if(!(keyCode >= 48 && keyCode <=57))
                    {                    
                        switch(keyCode)
                        {
                            case 44:    
                                if((this.value.indexOf('.') == -1 && dec)){
                                    if(document.all)
                                        e.keyCode = 46;
                                    else{
                                        this.value += ".";
                                        stopKeyPress(e);
                                    }
                                }
                                else
                                    stopKeyPress(e);
                                break;
                            case 46:
                                if(this.value.indexOf('.') != -1 || !dec)
                                    stopKeyPress(e);
                                break;
                            default:
                                stopKeyPress(e);
                        }
                    }
                    else
                    {
                        if(dec)
                        {        
                            val = infos[this.id].nbDec;
     
                            if(this.value.indexOf('.') != -1)
                            {
                                if(this.value.length - this.value.indexOf('.') - 1 == parseInt(val))
                                    stopKeyPress(e);
                            }
     
                        }
     
                    }
     
                }
     
            }
     
     
     
            function stopKeyPress(e){
     
                if(!document.all)
                    e.preventDefault();
                 else
                     e.keyCode = 0;
     
                 return false;
            }
     
            window.onload=function(){
                setNumeric("numField");
                setNumeric("numField2");
            }
        </script>
    </head>
     
    <body>
        <input type="text" id="numField" /><input type="text" id="numField2" />
    </body>
    </html>
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 32
    Points : 29
    Points
    29
    Par défaut
    Vraiment, mais vraiment bien bâti! On en apprend à tous les jours =)

    Entre-temps, je me suis débrouillé autrement :

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    function changementFormulaire(colonne){
     var total = 0;
     var champsMax;
     
     switch(colonne)
     {
      case 2:
       champsMax = 126;
       break;
      case 3:
       champsMax = 127;
       break;
      case 4:
       champsMax = 128;
       break;
      default:
       break;
     }
     
     for(compteur = colonne ; compteur <= champsMax ; compteur=compteur+4){
    //c'est là où la concaténation va se faire.
      if (check(compteur))
       total += parseFloat(window.document.getElementById("Text" + compteur).value);   
     }
     
     switch(colonne)
     {
      case 2:
       window.document.formInspecteurs.Text129.value = total;
       break;
      case 3:
       window.document.formInspecteurs.Text130.value = total;
       break;
      case 4:
       window.document.formInspecteurs.Text131.value = total;
       break;
      default:
       break;
     }
     if(colonne != 1){
      window.document.formInspecteurs.Text132.value = 
    parseFloat(window.document.formInspecteurs.Text129.value) + 
    parseFloat(window.document.formInspecteurs.Text130.value) + 
    parseFloat(window.document.formInspecteurs.Text131.value);
     }
    }
     
    function check(compteur){
     var valeurTf = window.document.getElementById("Text" + compteur).value;
     //mets en rouge le champs qui ne respecte pas la règle.
     if (isNaN(valeurTf) || valeurTf < 0){
      window.document.getElementById("Text" + compteur).style.color = "red";
      return false;
     }
     else if (valeurTf >= 0){
      window.document.getElementById("Text" + compteur).style.color = "black";
      return true;
     }
    }
    Toutefois, si j'appuis sur le bouton réinitialiser, la couleur persiste... des idées?

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

Discussions similaires

  1. restriction user SFTP seulement non SSH
    Par ABIDIN dans le forum Solaris
    Réponses: 0
    Dernier message: 13/10/2014, 22h46
  2. Réponses: 4
    Dernier message: 06/03/2013, 17h16
  3. selectionner seulement les cellules ayant une valeurs numérique
    Par Julaxio dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 16/06/2011, 08h50
  4. [J2ME] restriction TextField
    Par chamanR dans le forum Général Java
    Réponses: 1
    Dernier message: 02/02/2011, 16h07
  5. Update seulement non numérique
    Par cmoi70 dans le forum MySQL
    Réponses: 1
    Dernier message: 02/11/2010, 12h50

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