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 au moins une case est cochée dans checkbox


Sujet :

JavaScript

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut Vérifier si au moins une case est cochée dans checkbox
    Bonjour

    Je suis débutant en javascript. Je suis en train de faire un formulaire (form1) ou l'utilisateur saisit un tas d'informations (nom, prénom, etc) et ou il y a une série de checkbox pour savoir dans quelle région il exerce principalement.
    A la validation du formulaire je fais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onsubmit="return verif_formulaire()"
    Et dans la fonction verif_formulaire() je fais une série de tests pour savoir si la saisie est valide. Pour l'instant les tests précédents se passent bien, mais j'ai un problème sur la série de checkbox pour les régions. Je voudrais vérifier qu'au moins une région a été cochée. Mes régions s'appellent id_region_1, id_region_2, etc... Jusqu'à 22.




    J'ai fait le test sur la valeur id_region_1 (Alsace) avec ces lignes et ça fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (document.form1.id_region_1.checked == false){
    alert("Veuillez entrer la région ou vous exercez principalement");
    return false;
    }
    Je voudrais maintenant faire le test sur les 22 id_region_. Dans la fonction verif_formulaire() je fais donc le test par l'appel d'une fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    checkbox_selected(22,id_region_);
    Voici la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function checkbox_selected(nb,idBox)
    {
    var i;
    for (i=1;i<nb;i++)
    {
    if (document.form1.(idBox+"["+i+"]").checked == true) {
    return true;
    break;
    }
    }
    alert("Veuillez entrer au moins une région ou vous exercez principalement");
    return false;
    }
    J'ai cherché dans le forum et j'ai essayé d'adapter mais ça ne marche pas... Je crois qu'il y a une erreur sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (document.form1.(idBox+"["+i+"]").checked == true)
    Quelqu'un pourrait il m'aider ?
    Merci d'avance !

  2. #2
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Et le formulaire qui contient les checkbox dans ta page, ils sont comment??

    Car je crois que sur un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    onsubmit="return verif_formulaire()"
    c'est un formulaire du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <form action="#" method="GET" name="form" onsubmit="return verif_formulaire(this)">

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut Formulaire
    Voici la ligne complète :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <form id="form1" name="form1" method="post" action="traitement.php" onsubmit="return verif_formulaire()">
    Mais de ce côté là tout est ok les tests précédents fonctionnent déjà.

  4. #4
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Pour une situation de ce genre j'avais a tester des imput "text" mais je pense que tu peux le faire avec les checkbox ...

    Tu prends la collection form.elements et ton code devrait devenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function checkbox_selected(nb)
    {
    var i;
    for (i=1;i<nb;i++)
    {
    if (document.form1.elements[i].checked == true) {
    return true;
    break;
    }
    }
    alert("Veuillez entrer au moins une région ou vous exercez principalement");
    return false;
    }
    Par contre il faut savoir combien de controles sont avant tes checkbox ...
    Ex si avant deux input "text" alors tu fait form1.elements[i+2]

  5. #5
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut

    Je considére les input "text" dans la même form1 dans mon exemple

  6. #6
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut March pô
    J'ai essayé ça ne marche pô...

    Personne d'autre pour m'aider ?

  7. #7
    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 : 54
    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 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    checkbox_selected(22,id_region_);
    Si tes checkbox sont identifiées "id_region_i, je vois mal ce que signifie idBox+"["+i+"]".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (i=1;i<nb;i++)
    {
    if (document.form1.(idBox+i).checked == true) {
    return true;
    }
    }
    Le break ne sert à rien puisque le return te fait déjà sortir de la fonction, de plus, attention :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    checkbox_selected(22,'id_region_');

  8. #8
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut Bovino strikes back !
    Merci Bovino !

    Donc j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    checkbox_selected(22,'id_region_')
    et puis la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function checkbox_selected(nb,idBox)
    {
    var i;
    for (i=1;i<nb+1;i++)
    {
    if (document.form1.(idBox+i).checked == true) return true;
    }
    alert("Veuillez entrer au moins une région ou vous exercez principalement");
    return false;
    }
    Mais ça marche pô.... Si je laisse les régions vides il ne se passe rien... Aurais je oublié quelque chose ???

    Ce serait pas parce qu'on essaie de concaténer une chaine avec un chiffre ? (idBox+i)

  9. #9
    Membre expérimenté
    Avatar de Jumano
    Profil pro
    Inscrit en
    Février 2007
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 1 163
    Points : 1 595
    Points
    1 595
    Par défaut
    Bonjour,
    Tu ne reprends pas le code que l'on te donne :
    Tu mets :
    au lieu de :

  10. #10
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut Code
    Oui il y a avait une petite erreur ici je pense.

    Si je ne mets pas nb+1 on ne teste pas l'id_region_22

  11. #11
    Membre expérimenté
    Avatar de Jumano
    Profil pro
    Inscrit en
    Février 2007
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 1 163
    Points : 1 595
    Points
    1 595
    Par défaut
    Tu peux montrer le code de ta liste avec les checkbox ...

  12. #12
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut Checkbox
    Je m'attendais un peu à ce complément d'info...!

    J'ai taillé dans le code (à la serpe) pour éviter les 22 régions ! Pour l'instant ça fonctionne et ça m'écrit correctement dans la base.

    Par exemple, si l'utilisateur a choisi Alsace et Auvergne, ça m'écrit dans la base "ac".

    Je rappelle que ces lignes que j'ai testées fonctionnent, et que je cherche maintenant à faire les 22 tests dans une fonction. Je pourrais évidemment répéter 22 fois le test avec un "ou", mais il s'agit d'alléger le code !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (document.form1.id_region_1.checked == false){
    alert("Veuillez entrer la région ou vous exercez principalement");
    return false;
    }

    Voici les checkbox :
    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
    <tr><td width="214"><p><strong class="Style4">Je me déplace principalement<br />dans les régions suivantes</strong></p></td>
    <td width="294" align="left" valign="middle" class="Style4">
     
    <div style="width:98%;height:100px;overflow:auto;border:1px solid #CCCCCC;padding:2px;">
     
    <input type="checkbox" name="id_region_1" value="a"  <?php if((isset($_POST['id_region_1'])) && (($_POST['id_region_1']) == "a")) {$checked = "checked=\"checked\""; 
    echo $checked;}?> />
     
    Alsace<br/>
     
    <input type="checkbox" name="id_region_2" value="b" <?php if((isset($_POST['id_region_2'])) && (($_POST['id_region_2']) == "b")) { 
    $checked = "checked=\"checked\"";       
    echo $checked;}?> />
     
    Aquitaine<br/>
    </div></td></tr>

  13. #13
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Et en essayant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (eval("document.form1.id_region_"+i+".checked == true"))

  14. #14
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut Eurêka ?
    Ah il y a de l'idée Fench !!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function checkbox_selected(nb,idBox)
    {
    var i;
    for (i=1;i<nb+1;i++)
    {
    if (eval("document.form1.id_region_"+i+".checked == true")) return true;
    }
    alert("Veuillez entrer au moins une région ou vous exercez principalement");
    return false;
    }
    Ca me renvoit bien l'alert "Veuillez entrer au moins une région ou vous exercez principalement" si je laisse les régions vides. Mais quand je clique pour fermer cetet alert, il m'envoit l'alert du contrôle suivant (sur le jour de naissance !)
    Peut-être que le break n'était pas si inutile finalement...

  15. #15
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    eval() ? Bof ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    checkbox_selected(22,'id_region_')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function checkbox_selected(nb,idBox)
    {
    var i;
    for (i=1;i<=nb;i++)
    {
    if (document.forms['form1'].elements[idBox+i].checked) return true;
    }
    alert("Veuillez entrer au moins une région ou vous exercez principalement");
    return false;
    }
    A+

  16. #16
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut Eurêka 2 ?
    Ta solution marche aussi E.Bzz !

    Vous vous tirez la bourre ou quoi ??!!!

    Mais j'ai tjrs cette alert suivante qui s'ouvre...

  17. #17
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par pasc06 Voir le message
    Vous vous tirez la bourre ou quoi ??!!!
    On a posté en même temps

    J'ai juste édité pour déconseiller l'eval() (à éviter autant que possible !! )...

    A+

  18. #18
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par pasc06 Voir le message
    Mais j'ai tjrs cette alert suivante qui s'ouvre...
    Dans ta fonction verif_formulaire() alors ?

    On peut la voir aussi ?

    A+

  19. #19
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Eh bein bein bein j'avais aussi proposé au début d'utiliser 'elements' mais je ne savais pas que l'on pouvait faire directement
    Je pensais que c'était uniquement en numérique sur le nombre de controls !!!
    au moins j'ai apris cette astuce qui probablement améliora mon code

  20. #20
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut Fonction verif_formulaire()
    La voilà en partie :

    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
    function verif_formulaire()
    {
    	if(document.form1.pseudo.value == "") {
     	alert("Veuillez entrer votre pseudo");
       	document.form1.pseudo.focus();
      	return false;
      	}
    	else {
    	validite('form1','pseudo','A',3,20);
    	if (probleme == 1) {
    	document.form1.pseudo.focus();
      	return false;
    		 }
    	}
    	if(document.form1.telephone.value == "") {
    		if(document.form1.id_contact[0].checked != 1) {
    		alert("Pour être contacté par téléphone vous devez indiquer votre numéro");
    		document.form1.telephone.focus();
      		return false;
      		}
    	}
    	else {
    	validite('form1','telephone','N',10,10);
    	if (probleme == 1) {
    	(document.form1.telephone.value) = "";
    	document.form1.telephone.focus();
    	return false;
    		}
    	}
    	if (document.form1.id_pays.value == 0){
     	alert("Veuillez entrer votre pays de résidence");
    	return false;
      	}
    	if (document.form1.id_ville.value == 0){
     	alert("Veuillez entrer votre ville de résidence");
    	return false;
      	}
     
    	checkbox_selected(22,'id_region_')
     
    	if ((document.form1.jour_naissance.options[0].selected) && (document.form1.jour_naissance.value == "jour")){
     	alert("Veuillez entrer votre jour de naissance");
    	return false;
      	}
    }

    J'ai essayé de faire un focus mais ça ne corrige pas le problème...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function checkbox_selected(nb,idBox)
    {
    var i;
    for (i=1;i<=nb;i++)
    {
    if (document.forms['form1'].elements[idBox+i].checked) return true;
    }
    alert("Veuillez entrer au moins une région ou vous exercez principalement");
    document.form1.id_region_1.focus();
    return false;
    }
    Donc je résume, si je laisse les régions vides l'alerte s'affiche bien, mais qd je la referme en cliquant sur "ok", ça m'ouvre direct l'alerte suivante sur le jour de naissance.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. comment tester si une case est cochée dans un fenêtre d'impression
    Par tibofo dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 24/08/2009, 16h13
  2. Vérifier qu'au moins une case est cochée
    Par zizou86 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 17/02/2008, 13h53
  3. Vérifier si au moins une case est cochée
    Par ozzmax dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 05/07/2007, 15h34
  4. Vérifier si une case est cochée
    Par Nadd dans le forum Langage
    Réponses: 2
    Dernier message: 24/03/2006, 18h47
  5. Réponses: 2
    Dernier message: 08/08/2005, 13h33

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