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 :

tout cocher/tout décocher checkboxs


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 379
    Points : 123
    Points
    123
    Par défaut tout cocher/tout décocher checkboxs
    Salut,

    j'ai une liste de checkbox, et j'ai ajouté des bouton cocher tout/decocher tout , pour cocher les checkbox , ou les decocher

    le probléme c'est que ca ne marche qu'avec le premier checkbox, avec les autres rien ne se passe

    je vous montre mon code:

    pour commencer le script qui est dans le <head>

    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
    <script type="text/javascript">
    <!--
     
     
    	function GereChkbox(conteneur, a_faire) {
    	var blnEtat=null;
    	var Chckbox = document.getElementById(conteneur).firstChild;
    		while (Chckbox!=null) {
    			if (Chckbox.nodeName=="INPUT")
    				if (Chckbox.getAttribute("type")=="checkbox") {
    					blnEtat = (a_faire=='0') ? false : (a_faire=='1') ? true : (document.getElementById(Chckbox.getAttribute("id")).checked) ? false : true;
    					document.getElementById(Chckbox.getAttribute("id")).checked=blnEtat;
    				}
    			Chckbox = Chckbox.nextSibling;
    		}
    	}
    	//-->
    	</script>
    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
    for($i=0;$i<count($IDS);$i++)
    							{
    								echo"<TR>
    									<TD id='nom_".($i+1)."' align=\"center\">
    									$NOMS[$i]
    									</TD>
    
    									<TD id='pw_".($i+1)."' align=\"center\">
    									$PWS[$i]
    									</TD>
    
    									<TD id='desc_".($i+1)."' align=\"center\">
    									$DESCS[$i] 
    									</TD>
    									<TD align=\"center\" id=\"div_chck\">
    									<input type=\"checkbox\" id='checkbox'".($i+1)."' name=projets[] value=$IDS[$i]>
    									</TD>
    								</TR>";
    							}
    
    ...
    
    
    <input type=\"button\" value=\"Tout cocher\" onClick=\"GereChkbox('div_chck','1');\">&nbsp;&nbsp;&nbsp;
    				<input type=\"button\" value=\"Tout décocher\" onClick=\"GereChkbox('div_chck','0');\">&nbsp;&nbsp;&nbsp;
    



    est ce que vous voyez le probleme ?


    merci



    ...

  2. #2
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    Salut,
    étant donné qu'il y a du php dans ton script , je me permet de te donner une fonction assez simple à comprendre et à implémenter sur ton script :

    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Check / Uncheck checkbox</title>
    <script type="text/javascript">
    	function checkUncheckAll(ElementRecherche,Action){
     
    		var etat = Action
    		var element = document.getElementById(ElementRecherche);
     
    		//On va travailler avec l'élément
    		with(element){
    			//Recherche de tous les inputs
    			var listeInput = getElementsByTagName('input');
     
    			//On parcours la liste de tous les inputs
    			for(var i = 0 ; i < listeInput.length ; i++){
    				//On vérifit s'il s'agit d'une checkbox , si oui on la coche
    				if(listeInput[i].type == "checkbox")
    				{
     
    					listeInput[i].checked = etat;
    				}
    			}
     
    		}
     
    	}
    </script>
    <body>
    <div id="jaune" style="background-color:yellow">
    		<input type="checkBox" name="toto" id="titi" checked="checked" />
    		<input type="checkBox" name="titi" id="toto" />
    		<input type="checkBox" name="tata" id="tata"  />
    		<input type="checkBox" name="tutu" id="tbob" checked="checked" />
    		<input type="checkBox" name="tete" id="att" checked="checked" />
    </div>
     
    <div id="vert" style="background-color:green">
    		<input type="checkBox" name="toto" id="titi" />
    		<input type="checkBox" name="titi" id="toto" />
    		<input type="checkBox" name="tata" id="tata"  />
    		<input type="checkBox" name="tutu" id="tbob" />
    		<input type="checkBox" name="tete" id="att" />
    </div>
     
     
    <input type="button" onclick="checkUncheckAll('jaune',true)" value="Cocher dans jaune" />
    <input type="button" onclick="checkUncheckAll('jaune',false)" value="Décocher dans jaune" />
    <input type="button" onclick="checkUncheckAll('vert',false)" value="Décocher dans vert" />
    <input type="button" onclick="checkUncheckAll('vert',true)" value="Cocher dans vert" />
    </body>
    </html>
    EDIT : j'ai remplacé la ligne :
    var i in listeInput par
    var i = 0 ; i < listeInput.length ; i++

    car il y a un gros bug sous ie6 , les 2 premiers élément ne sont pas pris en compte , voila ...
    Coordialement
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  3. #3
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Pour autant que je puisse déchiffrer ce code, il me semble qu'en effet le résultat obtenu est bien celui qui est codé : les <input> sont dans un <td> et il y a un <input> par <td> d'après le code PHP. Donc, sur ton code en javacsript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var Chckbox = document.getElementById(conteneur).firstChild;
    renvoie bien le noeud avec <input>, mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Chckbox = Chckbox.nextSibling;
    renvoie forcément null.

    Remarques au passage :
    1 - est ce que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById(Chckbox.getAttribute("id"))
    a la moindre chance de renvoyer autre chose que Chckbox ???

    2 - les valeurs des attributs sont des chaînes. Dans ton code PHP, il semble que les attributs name et value du <input> ne soient pas encadrés de guillemets

    3 - pourquoi ne pas utiliser l'attribut name pour éplucher les <input> qui t'intéressent ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var cbs = document.getElementsByName('projets[]');
    for( var i = 0; i < cbs.length; ++ i ) {/***/}

  4. #4
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 379
    Points : 123
    Points
    123
    Par défaut
    Citation Envoyé par le_chomeur Voir le message
    Salut,
    étant donné qu'il y a du php dans ton script , je me permet de te donner une fonction assez simple à comprendre et à implémenter sur ton script :

    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Check / Uncheck checkbox</title>
    <script type="text/javascript">
    	function checkUncheckAll(ElementRecherche,Action){
     
    		var etat = Action
    		var element = document.getElementById(ElementRecherche);
     
    		//On va travailler avec l'élément
    		with(element){
    			//Recherche de tous les inputs
    			var listeInput = getElementsByTagName('input');
     
    			//On parcours la liste de tous les inputs
    			for(var i = 0 ; i < listeInput.length ; i++){
    				//On vérifit s'il s'agit d'une checkbox , si oui on la coche
    				if(listeInput[i].type == "checkbox")
    				{
     
    					listeInput[i].checked = etat;
    				}
    			}
     
    		}
     
    	}
    </script>
    <body>
    <div id="jaune" style="background-color:yellow">
    		<input type="checkBox" name="toto" id="titi" checked="checked" />
    		<input type="checkBox" name="titi" id="toto" />
    		<input type="checkBox" name="tata" id="tata"  />
    		<input type="checkBox" name="tutu" id="tbob" checked="checked" />
    		<input type="checkBox" name="tete" id="att" checked="checked" />
    </div>
     
    <div id="vert" style="background-color:green">
    		<input type="checkBox" name="toto" id="titi" />
    		<input type="checkBox" name="titi" id="toto" />
    		<input type="checkBox" name="tata" id="tata"  />
    		<input type="checkBox" name="tutu" id="tbob" />
    		<input type="checkBox" name="tete" id="att" />
    </div>
     
     
    <input type="button" onclick="checkUncheckAll('jaune',true)" value="Cocher dans jaune" />
    <input type="button" onclick="checkUncheckAll('jaune',false)" value="Décocher dans jaune" />
    <input type="button" onclick="checkUncheckAll('vert',false)" value="Décocher dans vert" />
    <input type="button" onclick="checkUncheckAll('vert',true)" value="Cocher dans vert" />
    </body>
    </html>
    EDIT : j'ai remplacé la ligne :
    var i in listeInput par
    var i = 0 ; i < listeInput.length ; i++

    car il y a un gros bug sous ie6 , les 2 premiers élément ne sont pas pris en compte , voila ...
    Coordialement
    j'ai essayé ton script (je le trouve plus clair que celui que j'ai) mais j'ai encore le meme probléme, ca ne marche qu'avec le premier checkbox!!!

    je te remet le code !!

    primo ton script (C'est un copier coller, mais je le met quand meme)

    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
    <script type="text/javascript">
    	function checkUncheckAll(ElementRecherche,Action){
     
    		var etat = Action
    		var element = document.getElementById(ElementRecherche);
     
    		//On va travailler avec l'élément
    		with(element){
    			//Recherche de tous les inputs
    			var listeInput = getElementsByTagName('input');
     
    			//On parcours la liste de tous les inputs
    			for(var i = 0 ; i < listeInput.length ; i++){
    				//On vérifit s'il s'agit d'une checkbox , si oui on la coche
    				if(listeInput[i].type == "checkbox")
    				{
     
    					listeInput[i].checked = etat;
    				}
    			}
     
    		}
     
    	}
    </script>
    puis la boucle qui affiche mon tableau (la derniere colonne du tableau contient des 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
    17
    18
    19
    for($i=0;$i<count($IDS);$i++)
    							{
    								echo"<TR>
    									<TD id='nom_".($i+1)."' align=\"center\">
    									$NOMS[$i]
    									</TD>
     
    									<TD id='pw_".($i+1)."' align=\"center\">
    									$PWS[$i]
    									</TD>
     
    									<TD id='desc_".($i+1)."' align=\"center\">
    									$DESCS[$i] 
    									</TD>
    									<TD align=\"center\" id=\"div_chck\">
    									<input type=\"checkbox\" id='checkbox'".($i+1)."' name=projets[] value=$IDS[$i]>
    									</TD>
    								</TR>";
    							}

    finalement les 2 boutons , cocher et decocher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <input type=\"button\" value=\"Tout cocher\" onClick=\"checkUncheckAll('div_chck',true);\">&nbsp;&nbsp;&nbsp;
    				<input type=\"button\" value=\"Tout décocher\" onClick=\"checkUncheckAll('div_chck',false);\">&nbsp;&nbsp;&nbsp;
    				<br /><br />

    JE pense avoir fait la meme chose que toi, mais la le resultat est le meme, ca ne marche qu'avec le premier checkbox!!


    merci!



    ...

  5. #5
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    ok j'ai trouvé ...

    tu fais une boucle pour créer ton tableau et si on regarde l'appel sur checkUncheckAll()

    on a besoins d'un conteneur pour chercher toute les checkbox qui sont contenu dedans , HORS, lorsque tu boucles, tu créer X ligne avec le même id :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    									<TD align=\"center\" id=\"div_chck\">
    									<input type=\"checkbox\" id='checkbox'".($i+1)."' name=projets[] value=$IDS[$i]>
    									</TD>
    en l'occurence : div_chck existe plusieurs fois , il s'arrète donc a la première occurence trouvée.

    essaye en mettant un id sur ton tableau plutot que sur ta td

    Coordialement
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  6. #6
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 379
    Points : 123
    Points
    123
    Par défaut
    Citation Envoyé par le_chomeur Voir le message
    ok j'ai trouvé ...

    tu fais une boucle pour créer ton tableau et si on regarde l'appel sur checkUncheckAll()

    on a besoins d'un conteneur pour chercher toute les checkbox qui sont contenu dedans , HORS, lorsque tu boucles, tu créer X ligne avec le même id :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    									<TD align=\"center\" id=\"div_chck\">
    									<input type=\"checkbox\" id='checkbox'".($i+1)."' name=projets[] value=$IDS[$i]>
    									</TD>
    en l'occurence : div_chck existe plusieurs fois , il s'arrète donc a la première occurence trouvée.

    essaye en mettant un id sur ton tableau plutot que sur ta td

    Coordialement
    j'ai essayé ca:

    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
    <script type="text/javascript">
    	function checkUncheckAll(ElementRecherche,Action){
    	
    		var etat = Action;
    		for(i=1;i<=4;i++)
    		{
    			var element = document.getElementById(ElementRecherche+i);
    		}
    		//On va travailler avec l'élément
    		with(element){
    			//Recherche de tous les inputs
    			var listeInput = getElementsByTagName('input');
    			
    			//On parcours la liste de tous les inputs
    			for(var i = 0 ; i < listeInput.length ; i++){
    				//On vérifit s'il s'agit d'une checkbox , si oui on la coche
    				if(listeInput[i].type == "checkbox")
    				{
    					
    					listeInput[i].checked = etat;
    				}
    			}
    			
    		}
    		
    	}
    </script>
    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
    for($i=0;$i<count($IDS);$i++)
    							{
    								echo"<TR>
    									<TD id='nom_".($i+1)."' align=\"center\">
    									$NOMS[$i]
    									</TD>
    
    									<TD id='pw_".($i+1)."' align=\"center\">
    									$PWS[$i]
    									</TD>
    
    									<TD id='desc_".($i+1)."' align=\"center\">
    									$DESCS[$i] 
    									</TD>
    									<TD align=\"center\" id='div_chck'".($i+1)."'>
    									<input type=\"checkbox\" id='checkbox'".($i+1)."' name=projets[] value=$IDS[$i]>
    									</TD>
    								</TR>";
    							}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    				<input type=\"button\" value=\"Tout cocher\" onClick=\"checkUncheckAll('div_chck',true);\">&nbsp;&nbsp;&nbsp;
    				<input type=\"button\" value=\"Tout décocher\" onClick=\"checkUncheckAll('div_chck',false);\">&nbsp;&nbsp;&nbsp;
    				<br /><br />

    et ca ne marche pas !! meme pas avec le premier checkbox!!!!!!!!



    ...

  7. #7
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 379
    Points : 123
    Points
    123
    Par défaut
    yessssssss, j'avais mal lu, en mettant l'id sur le <table> ca marché


    merci


    ...

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

Discussions similaires

  1. [Débutant] Tout cocher/Tout décocher checkbox avec button
    Par jeremyvb11 dans le forum Développement Windows
    Réponses: 6
    Dernier message: 24/11/2013, 15h41
  2. tout cocher des boutons checkbox
    Par manu404 dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 16/08/2011, 13h47
  3. tout cocher via des checkbox
    Par pi-2r dans le forum Langage
    Réponses: 7
    Dernier message: 20/06/2011, 21h00
  4. case à cocher : tout cocher /décocher
    Par DonKnacki dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/06/2008, 10h38
  5. Réponses: 7
    Dernier message: 09/01/2008, 10h20

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