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 :

Vérifier si des champs sont complétés avec des chiffres


Sujet :

JavaScript

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Infographiste
    Inscrit en
    Septembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Infographiste
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2014
    Messages : 12
    Points : 1
    Points
    1
    Par défaut Vérifier si des champs sont complétés avec des chiffres
    Bonjour,

    Je me casse la tête avec la vérification de mon formulaire et je ne trouve pas mon erreur, c'est pour cela que je viens voir si vous pourriez m'aider....

    J'ai un formulaire où les gens doivent compléter des quantités en chiffre, donc je voulais utiliser la fonction isNaN. J'ai testé avec quelques champs et ça fonctionnait mais maintenant ça ne fonctionne plus. Quand je teste le formulaire, même si je n'ai écrit qu'avec des chiffres, il me met le message d'erreur...
    Est ce que quelqu'un peut voir ce qui ne fonctionne pas ????
    Je ne mets que quelques ligne du code car je vérifie beaucoup de champs de la même façon.

    D'ailleurs, si il y a une méthode plus légère pour vérifier si plusieurs champs sont bien complétés avec des chiffres, je suis preneuse....


    Merci d'avance


    Alexandra


    Voici mon code


    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
    function valider(){ 
     
    var verification=""; 
    var str = document.formulaire_commande.hache_demi.value; 
    if (isNaN(str)) { 
    verification="Les quantités doivent être en chiffre"; 
    } 
     
    var str = document.formulaire_commande.cerises.value; 
    if (isNaN(str)) { 
    verification="Les quantités doivent être en chiffre"; 
    } 
     
    var str = document.formulaire_commande.prunes.value; 
    if (isNaN(str)) { 
    verification="Les quantités doivent être en chiffre"; 
    } 
     
    var str = document.formulaire_commande.mirabelles.value; 
    if (isNaN(str)) { 
    verification="Les quantités doivent être en chiffre"; 
    } 
     
    var str = document.formulaire_commande.compote.value; 
    if (isNaN(str)) { 
    verification="Les quantités doivent être en chiffre"; 
    } 
     
    var str = document.formulaire_commande.miel_liquide.value; 
    if (isNaN(str)) { 
    verification="Les quantités doivent être en chiffre"; 
    } 
     
    var str = document.formulaire_commande.miel_tartiner.value; 
    if (isNaN(str)) { 
    verification="Les quantités doivent être en chiffre"; 
    } 
     
    var str = document.formulaire_commande.yahourts_fruit.value; 
    if (isNaN(str)) { 
    verification="Les quantités doivent être en chiffre"; 
    } 
     
    var str = document.formulaire_commande.yahourts_fruit.value; 
    if (isNaN(str)) { 
    verification="Les quantités doivent être en chiffre"; 
    } 
     
    if(verification==""){ 
    } 
    else{//sinon verification n'est pas vide 
    alert(verification); 
    return false; 
    } 
    }

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Salut,

    Appliques d'abord parseInt ou parseFLoat sur les valeurs récupérées et ensuite teste avec isNaN.

    doc : https://developer.mozilla.org/fr/doc...Fonction_isNaN

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    Bonjour,

    Habituellement la documentation MDN est plus précise...

    Les fonctions "parseInt()" et "parseFloat()" ne renvoient pas NaN pour un chaine du genre : "123.45texte459"
    parseInt => 123
    parseFloat => 123.45

    Pour ma part, je ne vois pas d'où peut provenir le problème à moins qu'avec null ou '' la fonction isNaN() renvoie true pour certains navigateurs.
    Lequel utilises-tu pour tes tests ? As-tu tester plusieurs navigateurs ?


    devYan.

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Le pb est que les valeurs récupérées dans le html sont toujours de type "string" même si ce sont des nombres. C'est pour cette raison qu'il faut commencer par parser la valeur pour voir ensuite si elle peut convenir en tant que nombre ou nombre flottant.

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    isNan() a toujours fonctionné correctement avec des chaines, c'est même son seul intérêt puisqu'il existe également la constante NaN.

    Sinon il est possible de faire le contrôle avec une expression régulière.


    devYan.

  6. #6
    Nouveau Candidat au Club
    Femme Profil pro
    Infographiste
    Inscrit en
    Septembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Infographiste
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2014
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    J'ai oublié de vous dire, c'est mon 1er formulaire donc je suis novice et vous parlez un peu en chinois....

    Je teste avec Safari 7.0
    Quand j'avais moins de champs, ça fonctionnais mais depuis que j'en ai rajouté ça ne va plus, même si je complète avec des chiffres le formulaire, il me note le message d'erreur.

    Possible de faire avec une expression régulière ??? C'est mieux ou moins bien ???
    Et comment ça marche en gros ???

    Merci d'avance

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    @devyan oui t'as raison, j'étais pas bien réveillé sur ce coup.

    AlexandraBr fais un exemple minimaliste complet (javascript+html) et montre nous le code, on te le corrigera.

  8. #8
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par devyan
    c'est même son seul intérêt puisqu'il existe également la constante NaN
    C'est surtout la constante NaN qui n'a pas d'intérêt, surtout lorsque l'on sait que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    console.log(NaN == NaN);
    // false


    Sinon, effectivement, tel quel, c'est difficile de voir où se situe le problème.
    Comme conseillé par ABCIWEB, poste-nous un exemple...
    Essaye aussi d'ouvrir la console de développement (F12) pour voir s'il y a une erreur.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  9. #9
    Nouveau Candidat au Club
    Femme Profil pro
    Infographiste
    Inscrit en
    Septembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Infographiste
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2014
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Voilà j'ai réduit le nombre de champs...
    J'ai mis le début de mon formulaire aussi qui fonctionne mais si vous voyez une grosse erreur ou une méthode plus correct pour faire ce que je fais, n'hésitez pas...
    Je ne demande évidement pas que vous fassiez le code à ma place mais juste me donner des pistes et me dire ce qui est correct ou non....

    Merci d'avance

    Alex

    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    <script type="text/javascript">
    //<![CDATA[
     
    function valider(){
     
    var verification=""; 
     
    var str = document.formulaire_commande.sirop.value; 
    if (isNaN(str)) { 
    verification="Les quantités doivent être en chiffre"; 
    } 
     
    var str = document.formulaire_commande.cerises.value; 
    if (isNaN(str)) { 
    verification="Les quantités doivent être en chiffre"; 
    } 
     
    var str = document.formulaire_commande.miel_liquide.value; 
    if (isNaN(str)) { 
    verification="Les quantités doivent être en chiffre"; 
    } 
     
    var str = document.formulaire_commande.miel_tartiner.value; 
    if (isNaN(str)) { 
    verification="Les quantités doivent être en chiffre"; 
    } 
     
    var str = document.formulaire_commande.yahourts_fruit.value; 
    if (isNaN(str)) { 
    verification="Les quantités doivent être en chiffre"; 
    } 
     
    var str = document.formulaire_commande.yahourts_fruit.value; 
    if (isNaN(str)) { 
    verification="Les quantités doivent être en chiffre"; 
    } 
     
     
    if(verification==""){
     
    }
    else{
    alert(verification); 
    return false;
    } 
     
     
     
     
      // si la valeur du champ prenom est non vide
      if(document.formulaire_commande.nom.value != "" && 
         document.formulaire_commande.rue.value != "" && 
    	 document.formulaire_commande.code_postal.value != "" && 
    	 document.formulaire_commande.ville.value != "" && 
    	 document.formulaire_commande.telephone.value != "" &&
    	 document.formulaire_commande.mail.value != "" 
    	 ) 
      {
        // les données sont ok, on peut envoyer le formulaire    
        return true;
      }
      else {
        // sinon on affiche un message
        alert("Les champs avec une * sont obligatoire");
        // et on indique de ne pas envoyer le formulaire
        return false;
      }
     
     }
     
    function VerifMail()
    	{
       var regex = /^[a-z0-9._-]+@[a-z0-9._-]+\.[a-z]{2,6}$/;
       if(!regex.test(document.formulaire_commande.mail.value))
       {
          alert("Veuillez entrez une adresse mail correcte")
    	  return false;
       }
       else
       {
          return true;
       }
    }
     
     
     
    function valider_numero() {
    var nombre = document.formulaire_commande.telephone.value;
    var chiffres = new String(nombre);
     
    // Enlever tous les charactères sauf les chiffres
    chiffres = chiffres.replace(/[^0-9]/g, '');
     
     
    // Nombre de chiffres
    compteur = chiffres.length;
     
    if ((compteur<9) || (compteur>10) )
    {
    alert("Veuillez saisir un numéro de téléphone valide");
    return;
    }
     
    else
    {
     
    }
     
    }
     
     
     
     
     
    </script>
     
     
    </head>
     
    <body>
     
    <body>
    <div id="global">
     
    <div id="contenu">
    <p class="page_select"><img src="image/puce_select.jpg" width="16" height="18" /> Commander</p>
    <p class="page_select">&nbsp;</p>
    <form method="post" action="cible.php" onsubmit="return valider()" name="formulaire_commande">
    <p>
      <label>Nom :</label>
      <input type="text" name="nom" id="textfield" size="50"/>
     
    *</p>
    <p><label>Rue : </label>
      <input type="text" name="rue" id="textfield"  size="50"/>
     
    *</p>
    <p>
      <label>Code postal : </label>
      <input type="text" name="code_postal" id="textfield"  size="10"/>
     
    *</p>
    <p><label>Ville : </label>
        <input type="text" name="ville" id="textfield"  size="50"/>
     
    *</p>
    <p><label>Téléphone : </label>
     
      <input type="text" name="telephone" id="textfield" size="30" onblur="valider_numero();" />
     
    *</p>
    <p><label>
    Adresse mail :   </label>
        <input type="text" name="mail" id="textfield" onchange="VerifMail();" />
     
    *</p>
    <p class="remarque">Les champs avec un * sont obligatoires</p>
    <p>Sirop  
      <input type="text" name="sirop" size="5" /> 
      par 450gr</p>
    <p>Bocaux fruits  : cerises 
      <input type="text" name="cerises" size="5" /> 
      par 700gr </p>
     
    <p>Miel liquide  
      <input type="text" name="miel_liquide" size="5" /> 
      par 500gr</p>
    <p>Miel à tartiner  
      <input type="text" name="miel_tartiner" size="5" /> 
      par 500gr</p>
     
    <p>Yahourts aux fruits  
      <input type="text" name="yahourts_fruit" size="5" /> 
      par 200ml</p>
    <p>Yahourts à boire  
      <input type="text" name="yahourts_fruit" size="5" /> 
      par 500ml</p>
     
    <p id="buttons">
      <input type="submit" value="Envoyer" />
      <input type="reset" value="Recommencer" />
    </p>
    </p>
    <p>&nbsp;</p>
    </form>

  10. #10
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Attention aux duplicats d'ID ! Aussi tu peux indiquer
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="number">
    One Web to rule them all

  11. #11
    Nouveau Candidat au Club
    Femme Profil pro
    Infographiste
    Inscrit en
    Septembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Infographiste
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2014
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    En mettant Ca ne permet d'encoder que des chiffre ou ça ne change rien à ce niveau ?

  12. #12
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Le problème, c'est que les champs de type number ne sont pas encore suffisamment supportés par les navigateurs selon moi.
    Je pense que l'attribut pattern serait plus judicieux.

    AlexandraBr, plutôt que de poser la question, tu ne pourrais pas chercher des infos par toi-même ?
    L'API HTML5 de contrainte de validation.
    Créez des formulaires fabuleux avec HTML5.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  13. #13
    Nouveau Candidat au Club
    Femme Profil pro
    Infographiste
    Inscrit en
    Septembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Infographiste
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2014
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Bovino, si je peux chercher par moi-même...
    D'ailleurs c'est ce que j'ai fait jusqu'à présent...
    J'ai posté ce message car je bloque depuis un moment et que je ne trouve pas mon erreur....
    Je n'ai jamais eu de cours de programmation et le formulaire comme je l'ai fait n'est certainement pas le meilleur, ni fait de la meilleur façon mais je l'ai fait en cherchant sur les site, les forums,...
    Maintenant les explications ne sont pas toujours clair et certain site se contredise.... Alors c'est pas toujours évident non plus.

    Désolée de poser des questions pour mieux comprendre

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    Je pense que le problème vient d'un copier/coller effectué pour ajouter le second type de yaourt :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <p>Yahourts aux fruits  
      <input type="text" name="yahourts_fruit" size="5" /> 
      par 200ml</p>
    <p>Yahourts à boire  
      <input type="text" name="yahourts_fruit" size="5" /> 
      par 500ml</p>

    Ils ont le même name
    Du coup document.formulaire_commande.yahourts_fruit ne renvoie pas un HTMLElement mais une liste contenant tes 2 éléments.
    Comme cette liste n'a pas d'attribut value ton test renvoie toujours l'erreur

    Accessoirement, il n'y a pas de "h" à yaourt


    devYan.

  15. #15
    Nouveau Candidat au Club
    Femme Profil pro
    Infographiste
    Inscrit en
    Septembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Infographiste
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2014
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Merci Devyan....

    pour mes 2 erreurs, celle du code et de l'orthographe
    J'ai corrigé mais j'ai toujours le meme message

  16. #16
    Nouveau Candidat au Club
    Femme Profil pro
    Infographiste
    Inscrit en
    Septembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Infographiste
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2014
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    j'ai également changé les type des input en nombre comme conseillé par SylvainPV

    Mais en teste même sans rien écrire et en utilisant juste l'incrémentation, j'ai quand même le message....

  17. #17
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    Citation Envoyé par AlexandraBr Voir le message
    Merci Devyan....

    pour mes 2 erreurs, celle du code et de l'orthographe
    J'ai corrigé mais j'ai toujours le meme message
    As-tu vérifié que la même erreur n'est pas présente plusieurs fois dans ton code ?


    devYan.

  18. #18
    Nouveau Candidat au Club
    Femme Profil pro
    Infographiste
    Inscrit en
    Septembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Infographiste
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2014
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Oui oui j'ai vérifié et j'ai regarde si tout les noms correspondait bien

  19. #19
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Salut,

    T'avais pas dû bien vérifier ou je suppose que tu n'avais pas vérifié les champs javascript et html correspondants.

    Ci-dessous un exemple qui permet de t'éviter la litanie des tests successifs avec isNaN. Il s'agit de faire un tableau des éléments qui doivent avoir le même contrôle.

    Je te montre deux fonctions "ValiderForm" qui donnent le même résultat mais dont les éléments à contrôlés sont recherchés différemment :

    - La première consiste à faire un tableau en javascript qui reprend le nom des champs à contrôler.

    - La seconde actuellement en commentaire (/*...*/) recherche les éléments du formulaire qui ont la classe "nombre". L'avantage de cette seconde méthode est que l'on peut ajouter des éléments à contrôler dans le formulaire (en leur attribuant la classe "nombre") sans avoir à modifier le javascript.

    Dans les deux cas on contrôle ensuite les champs dans la boucle qui liste le tableau et on reprend le nom du label pour indiquer les champs à corriger que l'on affiche avec une alerte.

    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>titre onglet</title>
     
    <script type="text/javascript">
    //<![CDATA[
    function VerifMail()
    {
    	var regex = /^[a-z0-9._-]+@[a-z0-9._-]+\.[a-z]{2,6}$/;
    	if(!regex.test(document.formulaire_commande.mail.value))
    	{
    	  alert("Veuillez entrez une adresse mail correcte");
    	  return false;
    	}
    }
     
    function ValiderPhone() 
    {
    	var nombre = document.formulaire_commande.telephone.value;
    	var chiffres = new String(nombre);
     
    	// Enlever tous les charactères sauf les chiffres
    	chiffres = chiffres.replace(/[^0-9]/g, '');
     
     
    	// Nombre de chiffres
    	compteur = chiffres.length;
     
    	if ((compteur <9 ) || ( compteur > 10) )
    	{
    		alert("Veuillez saisir un numéro de téléphone valide");
    		return false;
    	}
    }
     
     
    function ValiderForm()
    {
    	// On reteste le mail et le numéro de téléphone
    	if(!(VerifMail() !== false && ValiderPhone() !== false)){return false}
     
    	// Teste les champs qui doivent être des nombres (j'ajoute le code postal)
    	// création d'un tableau contenant le name des input 
    	var champs = ['code_postal','sirop','cerises','miel_liquide','miel_tartiner','yahourts_fruit','yahourts_boire'];
    	var form = document.formulaire_commande;
    	var verif_nombre = ""; 
    	var str;
    	var label;
     
    	for (var i=0; i < champs.length; i++)
    	{
    		//console.log(form[champs[i]].value);
    		str = form[champs[i]].value;
    		if (isNaN(str)) 
    		{
    			// récupère le texte du label (qui est le parent) et concatène à verif_nombre
    			label = form[champs[i]].parentNode.textContent;
    			verif_nombre += "\n- "+label;
    		}
    	}
     
    	if(verif_nombre != "")
    	{
    		alert("le(s) champ(s): "+verif_nombre+"\nnécessite(nt) un nombre"); 
    		return false;
    	}
    	else
    	{
    		return true;
    	}
    }
     
    /*
    function ValiderForm()
    {
    	// On reteste le mail et le numéro de téléphone
    	if(!(VerifMail() !== false && ValiderPhone() !== false)){return false}
     
    	// Teste les champs qui ont la classe "nombre" dans le bloc ayant l'id "formulaire_commande"
    	var champs = document.getElementById('formulaire_commande').getElementsByClassName('nombre');
    	var verif_nombre = ""; 
    	var str;
    	var label;
     
    	for (var i=0; i < champs.length; i++)
    	{
    		str = champs[i].value;
    		if (isNaN(str)) 
    		{
    			// récupère le texte du label (qui est le parent) et concatène à verif_nombre
    			label = champs[i].parentNode.textContent;
    			verif_nombre += "\n- "+label;
    		}
    	}
     
    	if(verif_nombre != "")
    	{
    		alert("le(s) champ(s): "+verif_nombre+"\nnécessite(nt) un nombre"); 
    		return false;
    	}
    	else
    	{
    		return true;
    	}
    }
    */
    </script>
     
    </head>
     
    <body>
     
    <div id="contenu">
        <form method="post" action="cible.php" onsubmit="return ValiderForm()" id="formulaire_commande"  name="formulaire_commande">
        <p>
          <label>Nom<input type="text" name="nom" class="textfield" size="50" required /></label>*
        </p>
     
        <p>
        	<label>Rue<input type="text" name="rue" class="textfield"  size="50" required /></label>*
        </p>
     
        <p>
          <label>Code postal<input type="text" name="code_postal" class="textfield nombre"  size="10" required/></label>*
        </p>
     
        <p>
            <label>Ville<input type="text" name="ville" class="textfield"  size="50" required /></label>*
        </p>
     
        <p>
            <label>Téléphone<input type="text" name="telephone" class="textfield" size="30" onblur="ValiderPhone();" required /></label>*
        </p>
     
        <p>
            <label>Adresse mail :<input type="text" name="mail" class="textfield" onchange="VerifMail();" required /></label>*    </p>
     
        <p class="remarque">Les champs avec un * sont obligatoires</p>
     
        <p>
            <label>Sirop<input type="text" name="sirop" class="nombre" size="5" /></label>
          par 450gr
        </p>
     
        <p>
            <label>Bocaux fruits  : cerises<input type="text" name="cerises" class="nombre" size="5" /></label>
            par 700gr 
        </p>
     
        <p>
            <label>Miel liquide<input type="text" name="miel_liquide" class="nombre" size="5" /></label>
            par 500gr
        </p>
     
        <p>
            <label>Miel à tartiner<input type="text" name="miel_tartiner" class="nombre" size="5" /></label>
            par 500gr
        </p>
     
        <p>
            <label>Yahourts aux fruits<input type="text" name="yahourts_fruit" class="nombre" size="5" /></label>
            par 200ml
        </p>
     
        <p>
            <label>Yahourts à boire<input type="text" name="yahourts_boire" class="nombre" size="5" /></label>
            par 500ml
        </p>
     
        <p id="buttons">
          <input type="submit" value="Envoyer"  />
          <input type="reset" value="Recommencer" />
        </p>
     
        </form>
     
    </div>
    </body>
    </html>
    Remarques que j'utilise du javascript Vanilla (pour dire sans librairie). L'inconvénient dans ce code sont les méthodes "textContent" et "getElementsByClassName" qui ne sont pas compatibles avec les vieux navigateurs, par exemple "textContent" n'est compatible qu'à partir d' IE9. Pour être compatible avec les anciens navigateurs le code équivalent serait beaucoup plus chiant (litote) c'est pour cette raison entre autre qu'on utilise souvent les librairies javascript comme jquery.

    Sinon d'un manière générale, je conseillerais plutôt de faire tous les test possibles via html, comme le "required" que j'ai mis dans les champs input requis et de réserver le reste pour le javascript. Mais d'un autre côté c'est difficile de savoir ce qui est implémenté assez largement comme le faisait remarquer Bovino pour "number".

    Enfin bon se souvenir que tout cela c'est pour facilité la vie du visiteur mais il faut refaire tous les tests côté serveur (php ou autre).

  20. #20
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    De toutes façons le choix de HTML5 ne permet pas la compatibilité avec d'anciens navigateurs...


    devYan.

Discussions similaires

  1. Vérifier si des champs sont égaux
    Par pep972 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/05/2008, 15h15
  2. Vérifier si des champs sont vides
    Par Colbix dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 07/08/2007, 19h36
  3. [SELECT] Faire un select avec des champs vides
    Par MinsK dans le forum Langage SQL
    Réponses: 1
    Dernier message: 09/08/2005, 00h05
  4. Between avec des champs de tables
    Par talggir dans le forum Langage SQL
    Réponses: 3
    Dernier message: 24/05/2005, 09h11
  5. [word] Generer un document avec des champs
    Par webbulls dans le forum Bases de données
    Réponses: 3
    Dernier message: 29/04/2004, 10h47

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