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 :

Tester qu'au moins un chekbox est cochée


Sujet :

JavaScript

  1. #1
    Membre régulier
    Homme Profil pro
    directeur hypermarché
    Inscrit en
    Avril 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : directeur hypermarché

    Informations forums :
    Inscription : Avril 2009
    Messages : 227
    Points : 111
    Points
    111
    Par défaut Tester qu'au moins un chekbox est cochée
    Bonjour,

    J'ai un formulaire qui comporte 4 chekbox et je voudrais qu'une alerte s'affiche si aucun d'entre eux n'est coché.

    J'ai procédé comme suit :

    Dans le head, j'ai mis :
    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 testcheck(){
       $test=false;
       for ($i=1; $i<=4; $i++){
        $choix=document.getElementById('checkbox'+$i).checked;
        if ($choix==true){
          $test=true;
        }
      }
       if ($test==true){
       document.getElementById('form1').submit();
      }else{
       alert("Vous devez cocher la bonne réponse");
      }
    }
    et dans le body , j'ai :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     <form action="<?php echo $editFormAction; ?>" method="POST" name="form1" id="form1">
     <input type="checkbox" name="v1" id="v1" value="Y"/>
     <input type="checkbox" name="v2" id="v2" value="Y"/>
     <input type="checkbox" name="v3" id="v3" value="Y"/>
     <input type="checkbox" name="v4" id="v4" value="Y"/>
     <input type="submit" name="submit" value="Soumettre une question" onclick="testcheck()"/>
     <input type="hidden" name="MM_update" value="form1"  />
     </form>

    Je n'ai pas d'erreur mais le formulaire est envoyé sans message d'alerte si aucun checkbox n'est coché ...
    www.masterquizz.fr - Ne vous posez plus de questions

  2. #2
    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 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    C'est tout à fait normal !

    Ta fonction est appelée lors du clic sur le bouton submit et le clic sur le bouton submit provoque la soumission du formulaire, donc dans l'ordre :
    • si définie, la fonction attachée à l'événement submit du formulaire ;
    • l'envoi du formulaire au serveur.

    Ce qui signifie que si la fonction JavaScript n'inhibe pas le comportement par défaut, la seconde étape sera toujours effectuée !

    D'autre part, la vérification peut se faire en une seule ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function testcheck(){
        var cases = document.querySelector('input:checked');
        if(!cases){
            alert('Pas bon !');
            return false;
        }
        return true;
    }
    Bon, ça, c'est la version longue, la version en une ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function testcheck(){
        return document.querySelector('input:checked');
    }
    et pour le formulaire :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <form onsubmit="return testcheck()">
    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

  3. #3
    Membre régulier
    Homme Profil pro
    directeur hypermarché
    Inscrit en
    Avril 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : directeur hypermarché

    Informations forums :
    Inscription : Avril 2009
    Messages : 227
    Points : 111
    Points
    111
    Par défaut
    J'ai suivi tes conseils mais toujours pas d'alerte ?

    dans le head,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function testcheck(){
        return document.querySelector('input:checked');
    }
    et dans le body,

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="submit" value="Soumettre une question" onsubmit="return testcheck()"/>
    www.masterquizz.fr - Ne vous posez plus de questions

  4. #4
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 142
    Points
    11 142
    Par défaut
    bonjour,

    l'événement n'est pas sur la balise input bouton, mais sur la balise form.
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <form onsubmit="return testcheck()">

    d'une manière générale, ne mets pas d'événement sur un input de type submit.

  5. #5
    Membre régulier
    Homme Profil pro
    directeur hypermarché
    Inscrit en
    Avril 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : directeur hypermarché

    Informations forums :
    Inscription : Avril 2009
    Messages : 227
    Points : 111
    Points
    111
    Par défaut
    j'ai essayé avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form action="<?php echo $editFormAction; ?>" method="POST" name="form1" id="form1" onsubmit="return testcheck()">
    mais l'envoi se fait toujours sans alerte...
    www.masterquizz.fr - Ne vous posez plus de questions

  6. #6
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 142
    Points
    11 142
    Par défaut
    Il devrait pas y avoir de souci avec le code proposé par Bovino. On peut voir le code de ta fonction testcheck() ?
    Tu utilises quel navigateur ?

  7. #7
    Membre régulier
    Homme Profil pro
    directeur hypermarché
    Inscrit en
    Avril 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : directeur hypermarché

    Informations forums :
    Inscription : Avril 2009
    Messages : 227
    Points : 111
    Points
    111
    Par défaut
    Je viens de comprendre ...ce qui ne résoud pas mon problème .

    J'ai une autre case à cocher dans mon formulaire qu'il est obligatoire de cocher. Oups !

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <span id="sprycheckbox1">
        <input type="checkbox" name="yes" id="checkbox" value=""/>
    <span class="checkboxRequiredMsg Style16 Style15 Style17">Obligatoire !</span></span>

    Du coup , le problème est différent : il faut qu'une des 4 cases à cocher ( v1,v2,v3,v4 ) soit cochée et que yes soit obligatoirement cochée...
    www.masterquizz.fr - Ne vous posez plus de questions

  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 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Un peu d'imagination que diable...
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     <form action="<?php echo $editFormAction; ?>" method="POST" name="form1" id="form1">
     <input class="toCheck" type="checkbox" name="v1" id="v1" value="Y"/>
     <input class="toCheck" type="checkbox" name="v2" id="v2" value="Y"/>
     <input class="toCheck" type="checkbox" name="v3" id="v3" value="Y"/>
     <input class="toCheck" type="checkbox" name="v4" id="v4" value="Y"/>
     <input type="submit" name="submit" value="Soumettre une question" onclick="testcheck()"/>
     <input type="hidden" name="MM_update" value="form1"  />
     </form>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function testcheck(){
        return document.querySelector('.toCheck:checked');
    }
    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
    Membre régulier
    Homme Profil pro
    directeur hypermarché
    Inscrit en
    Avril 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : directeur hypermarché

    Informations forums :
    Inscription : Avril 2009
    Messages : 227
    Points : 111
    Points
    111
    Par défaut
    Je déprime...toujours rien.

    J'ai même essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onsubmit="return testcheck()
    dans le <form

    Pour info, j'ai testé avec IE et firefox
    www.masterquizz.fr - Ne vous posez plus de questions

  10. #10
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 142
    Points
    11 142
    Par défaut
    je t'ai pourtant donné une solution il y a quelques jours et tu as marqué la discussion resolue
    http://www.developpez.net/forums/d14...-cases-cocher/

    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
    function testcheck()
    {
    	var i, r;
    	var listInput = document.getElementById("form1").getElementsByTagName("input");
     
    	r = false;
    	for (i=0; i<4; i++)
    	{
    		if (listInput[i].type=="checkbox")
    		{
    			r = r || listInput[i].checked;
    		}
    	}
     
    	r = r && listInput[4].checked;
    	return r;
    }

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     <form method="POST" name="form1" id="form1" onsubmit="return testcheck()" action="www.developpez.net">
     <input class="toCheck" type="checkbox" name="v1" id="v1" value="Y"/>
     <input class="toCheck" type="checkbox" name="v2" id="v2" value="Y"/>
     <input class="toCheck" type="checkbox" name="v3" id="v3" value="Y"/>
     <input class="toCheck" type="checkbox" name="v4" id="v4" value="Y"/><br/>
     
     <input type="checkbox" name="v5" id="v5" value="Y"/>Yes<br/>
     
     <input type="submit" name="submit" value="Soumettre une question" />
     <input type="hidden" name="MM_update" value="form1"  />
     </form>

  11. #11
    Membre régulier
    Homme Profil pro
    directeur hypermarché
    Inscrit en
    Avril 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : directeur hypermarché

    Informations forums :
    Inscription : Avril 2009
    Messages : 227
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par Auteur Voir le message
    je t'ai pourtant donné une solution il y a quelques jours et tu as marqué la discussion resolue
    Effectivement, et tu peux voir en haut de ce post que j'avais appliqué ce que tu préconisais.

    Toutefois, pour une raison que j'ignore, cela ne fonctionne pas ou pas tout à fait. Je m'explique.

    J'ai créé une page avec seulement les 5 checkboxs; et dans ce cas là , le script fonctionne. Je coche bien v5 et le formulaire n'est envoyé qu'après avoir cocher v1,v2,v3 ou v4.

    Pourtant, quand j'essaie de faire exactement la même chose dans mon formulaire définitif qui comporte déjà de nombreuses vérifications de formulaire , cela ne fonctionne pas : impossible de valider le formulaire.

    Je pense que je vais essayer de travailler sur un if avant envoi du formulaire qui vérifiera que v1 et v2 et v3 et v4 n'est pas égal à zéro.
    www.masterquizz.fr - Ne vous posez plus de questions

  12. #12
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 142
    Points
    11 142
    Par défaut
    Effectivement, et tu peux voir en haut de ce post que j'avais appliqué ce que tu préconisais.
    ok. Dans mon esprit, je n'avais pas pensé à coder la solution de cette manière.

    Pourtant, quand j'essaie de faire exactement la même chose dans mon formulaire définitif qui comporte déjà de nombreuses vérifications de formulaire
    il y a peut-être un problème dans l'une de ces vérifications.

  13. #13
    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 669
    Points
    66 669
    Billets dans le blog
    1
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  14. #14
    Membre régulier
    Homme Profil pro
    directeur hypermarché
    Inscrit en
    Avril 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : directeur hypermarché

    Informations forums :
    Inscription : Avril 2009
    Messages : 227
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    Merci pour le lien. Très clair pour moi
    www.masterquizz.fr - Ne vous posez plus de questions

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

Discussions similaires

  1. Réponses: 20
    Dernier message: 07/08/2012, 09h41
  2. Verifier si au moins une checkbox est cochée
    Par AyManoVic dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/01/2011, 08h41
  3. Vérifier si au moins une case est cochée dans checkbox
    Par pasc06 dans le forum Général JavaScript
    Réponses: 34
    Dernier message: 18/11/2008, 15h14
  4. 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
  5. 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

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