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érification de plusieurs CHECKBOX en variable


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 12
    Points : 13
    Points
    13
    Par défaut Vérification de plusieurs CHECKBOX en variable
    Bonjour à tous,
    Après plusieurs recherches je suis toujours bloqué dans mon test de vérification si une case est coché.
    mon problème semble être la variable frm_group[i] qui ne fonctionne pas
    J'ai épuré le code pour plus de lisibilité car trop long
    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
     
     
    <SCRIPT>
    function validate(theForm) 
    {	
      for(i=0;i<theForm.frm_group.length;i++)
        {
    	   if (theForm.frm_group[i].checked == true)     
            {
             theForm.submit(); 
             return true;
            }  
    	}
            alert ("cocher au moins une case"); return false;
     
    }
     
     
    </SCRIPT>
     
    <FORM NAME="add" METHOD="post"  onSubmit="return validate(document.add)">
    <?php // je recherche dans ma table combien de region a $user_id
     
    $query = "SELECT * FROM `allocates` WHERE `type`= 4 AND `resource_id` = '$user_id'";            
    $result = mysql_query($query) or do_error($query, 'mysql query failed', mysql_error(),basename( __FILE__), __LINE__);
     
    while ($row2 = stripslashes_deep(mysql_fetch_assoc($result)))  // pour chaque region j'affiche une checkbox avec le nom associé et je donne un nom qui s’incrémente frm_group[] car différent selon le user 
    {  
     
    ?>
       
    <div>
    <INPUT TYPE='checkbox'  name='frm_group[]'  VALUE=' <?php echo $row2['group'];?>'><?php echo $row2['group'];?></INPUT>
    </div>
     
     <?php
    }
    ?>
    <INPUT TYPE="submit"   VALUE="Valider"  onClick="validate(document.add);" STYLE = 'margin-top:4px;'>
    </FORM>

    Merci pour toute solution (correction devrais-je dire)
    Merci David

  2. #2
    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 143
    Points
    11 143
    Par défaut
    bonjour,

    peut-on voir le code HTML généré par ton script PHP ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 12
    Points : 13
    Points
    13
    Par défaut
    le voici
    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
     
     
    <SCRIPT>
    function validate(theForm) 
    {	
      for(i=0;i<theForm.frm_group.length;i++)
        {
    	   if (theForm.frm_group[i].checked == true)     
            {
             alert ("une case cochée"); 
             return true;
            }  
    	}
            alert ("cocher au moins une case"); return false;
     
    }
     
     
    </SCRIPT>
     
    <FORM NAME="add" METHOD="post"  onSubmit="return validate(document.add)">  
     
    <div>
    <INPUT TYPE='checkbox'  name='frm_group[]'  VALUE="1">1</INPUT>
    </div>
     
     
    <div>
    <INPUT TYPE='checkbox'  name='frm_group[]'  VALUE="3">3</INPUT>
    </div>
     
     
    <div>
    <INPUT TYPE='checkbox'  name='frm_group[]'  VALUE="4">4</INPUT>
    </div>
     
     
    <div>
    <INPUT TYPE='checkbox'  name='frm_group[]'  VALUE="5">5</INPUT>
    </div>
     
     <INPUT TYPE="submit"   VALUE="Valider"  onClick="validate(document.add);" STYLE = 'margin-top:4px;'>
    </FORM>

  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 143
    Points
    11 143
    Par défaut
    Plusieurs remarques :
    code HTML :
    - prends l'habitude d'écrire les balises et les attributs en minuscules (onsubmit pas onSubmit, type et non TYPE, etc.)
    - la balise input est auto fermante :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type='checkbox'  name='frm_group[]'  value="5"/>5
    Tu peux associer un label à une balise input si tu le souhaites.
    - inutile d'ajouter un événement onsubmit dans un bouton de type submit, c'est sous entendu.
    - il manque l'attribut action à ta balise form.

    javascript :
    - tu as écrit onsubmit="return validate(document.add)". Pourquoi document.add ? Pourquoi ne pas directement transmettre l'objet form à ta fonction ? De cette manière onsubmit="return validate(this)".
    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    theForm.frm_group[i].checked
    cette syntaxe pour accéder à un élément de ton formulaire n'est pas recommandée. Comme l'objet form est transmis à la fonction autant l'utiliser :
    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
    function validate(theForm)
    {
    	var inputList = theForm.getElementsByTagName("input"); // retourne tous les objets de type input dans le formulaire
    	var i;
    	for (i=0;i<inputList.length; i++)
    	{
    		if (inputList[i].checked)
    		{
    			alert("une case cochée"); // une case est cochée...
    			return true;  // le formulaire est envoyé (pas besoin de submit())
    		}
     
    	}
    	alert("Aucune case cochée"); // le formulaire n'est pas envoyé
    	return false;
    }

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 12
    Points : 13
    Points
    13
    Par défaut
    Merci beaucoup Auteur tout fonctionne parfaitement, j'ai bien pris note de tes recommandations

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

Discussions similaires

  1. [Tableaux] Envoyer plusieurs checkboxes
    Par jfjava2002 dans le forum Langage
    Réponses: 8
    Dernier message: 14/03/2006, 18h06
  2. Réponses: 3
    Dernier message: 21/02/2006, 16h43
  3. récupérer données de plusieurs checkbox
    Par themis121 dans le forum Langage
    Réponses: 46
    Dernier message: 28/11/2005, 16h30
  4. Comment cocher/décocher plusieurs "checkbox"?
    Par Crazynoss dans le forum ASP
    Réponses: 2
    Dernier message: 15/05/2005, 23h38
  5. Cochage de plusieurs checkbox
    Par licorne dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 09/03/2005, 10h30

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