une case a cocher pour decocher plusieurs case a cocher

Eléphant du PHP | 108 Messages

30 oct. 2006, 17:53

bonjour,

j'aimerais que si je coche la case "all" que tous les autres soient deselectionner mais je n'y arrive pas par contre je sais decocher "all" si je coche une des autres case si le nom des case n'est pas un nombre mais là les noms (name des cases à cocher) sont des nombres!
   
function deselectall0(cas,choix){

      
		   if (cas.checked)
		   {
               
                   choix.checked=false;
               }
           }
       
     
   }
   function deselect1(cas,choix){
        //test si on a plusieur ligne
       
           if (choix.checked){
              choix.checked=false;
               
           }
       
     
   }
</script>
<form name="monform1">
<input type="checkbox" name="1" value="21" onclick="deselect1(document.monform1.1,document.monform1.all)">
<input type="checkbox" name="2" value="2" onclick="deselect1(document.monform1.2,document.monform1.all)">
<input type="checkbox" name="3" value="123" onclick="deselect1(document.monform1.3,document.monform1.all)">
<input type="checkbox" name="4" value="644" onclick="deselect1(document.monform1.4,document.monform1.all)">
<input type="checkbox" name="5" value="45" onclick="deselect1(document.monform1.5,document.monform1.all)">
<input type="checkbox" name="6" value="66" onclick="deselect1(document.monform1.6,document.monform1.all)">
<input type="checkbox" name="7" value="7" onclick="deselect1(document.monform1.7,document.monform1.all)">
<input type="checkbox" name="8" value="18" onclick="deselect1(document.monform1.8,document.monform1.all)">
<input type="checkbox" name="9" value="9" onclick="deselect1(document.monform1.9,document.monform1.all)">
<input type="checkbox" name="all" value ="all" onclick="deselectall0(document.monform1.all,document.monform1.a1)">
</form>
je bloque sur la maniere de faire si quelqu'un a une idée qui pourrait m'aider :wink:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

30 oct. 2006, 18:32

Une petite astuce en javascript : La syntaxe

Code : Tout sélectionner

document.nomFormulaire.nomChamp
est en fait une notation simplifiée de

Code : Tout sélectionner

document.forms['nomFormulaire'].elements['nomChamp']
forms faisant référence à l'ensemble des formulaire du document
elements faisant référence à l'ensemble des champs du formulaire.

Dès lors, puisque l'on utilise des chaines de texte pour identifier un élément du formulaire, il est possible de les construire dynamiquement, et pourquoi pas au sein d'une boucle :)
for(...) {
  document.forms['nomFormulaire'].elements[maVariable].checked = true;
}
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 108 Messages

31 oct. 2006, 09:53

merci Ryle de ta reponse, je m'en vais tester ca sur le champ

:wink:

Mammouth du PHP | 19672 Messages

31 oct. 2006, 10:44

Une petite astuce en javascript : La syntaxe

Code : Tout sélectionner

document.nomFormulaire.nomChamp
est en fait une notation simplifiée de

Code : Tout sélectionner

document.forms['nomFormulaire'].elements['nomChamp']
forms faisant référence à l'ensemble des formulaire du document
elements faisant référence à l'ensemble des champs du formulaire.
Si je peux me permettre, je vais apporter une légère correction à ceci :
La première formulation fait référence à l'attribut "name" de la balise <form> puis de la balise du champ concerné;

La seconde formulation fait référence aux attributs "id" de ces mêmes balises.

Mais attention, en XHTML, l'attribut name est interdit dans la balise <form> et doit être remplacé par l'attribut "id", donc en XHTML, seule la seconde formulation sera valide. Pour les éléments du formulaire, on utilisera de la même manière que présenté par Ryle selon qu'on utilise un attribut name ou un attribut id pour pointer dessus.

Donc, on fera soit

Code : Tout sélectionner

document.forms['idDuFormulaire'].nomChamp
soit

Code : Tout sélectionner

document.forms['idDuFormulaire'].elements['idDuChamp']
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 108 Messages

31 oct. 2006, 10:47

comment je peux pointer que sur les checkbox que je veux decocher car j'ai d'autres input dont des autres checkbox dans mon formulaire?
function deselectall()
{
	for(var i=0; i<9;i++) 
	{
		if((element.type=="checkbox")&&(element.name == i))
		{
			if (document.forms['formMateriel'].elements[i].checked)
			{
				document.forms['formMateriel'].elements[i].checked = false;
			}
		}
	} 

}
j'ai essaye et ca ne fonctionne pas! :cry:

Eléphant du PHP | 108 Messages

31 oct. 2006, 11:01

function deselectall()
{
    for(var i=0; i<100;i++) 
    {
      
            if (document.forms['monform1'].elements[i].checked)
            {
                document.forms['monform1'].elements[i].checked = false;
            }
        
    } 

}
<form name="monform1">
<input type="checkbox" name="1" id="1" value="1" onclick="deselect1(document.monform1.a1,document.monform1.all)">
<input type="checkbox" name="2" id="1" value="2" onclick="deselect1(document.monform1.b,document.monform1.all)">
<input type="checkbox" name="3" id="1" value="3" onclick="deselect1(document.monform1.c,document.monform1.all)">
<input type="checkbox" name="4" id="1" value="4" onclick="deselect1(document.monform1.d,document.monform1.all)">
<input type="checkbox" name="5" id="1" value="5" onclick="deselect1(document.monform1.e,document.monform1.all)">
<input type="checkbox" name="6" id="1" value="6" onclick="deselect1(document.monform1.f,document.monform1.all)">
<input type="checkbox" name="7" id="1" value="7" onclick="deselect1(document.monform1.g,document.monform1.all)">
<input type="checkbox" name="8" id="1" value="8" onclick="deselect1(document.monform1.h,document.monform1.all)">
<input type="checkbox" name="9" id="1" value="9" onclick="deselect1(document.monform1.i,document.monform1.all)">
<input type="checkbox" name="all" value ="all" onclick="deselectall0(document.monform1.all,document.monform1.a1)">
</form>
quand je faid ca, ca me decoche tout meme celui sur le lequel j'ai mis la fontion"deselectall" donc je ne crois pas que le texte entre crochet soit vraiment l'id

Code : Tout sélectionner

document.forms['idDuFormulaire'].elements['idDuChamp']

Mammouth du PHP | 19672 Messages

31 oct. 2006, 11:54

Attention, une valeur d'attribut id ne peut être présente qu'une seule fois dans une page HTML : toutes tes cases à cocher on le même attribut ce qui est invalide d'une part et source de bugs d'autre part. Par contre l'attribut name peut avoir le même attribut name, mais il est possible dans ce cas de mettre une valeur tabulaire : name="mescasesacocher[]" par exemple
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

31 oct. 2006, 12:26

Merci pour la précision Cyrano :)
J'ai longtemps utilisé le elements['nomDuChamp'] au lieu de l'id, j'ai l'impression que les navigateurs le tolère malgré tout ?

sasg >> Pourquoi faire une boucle de 0 à 100 alors que tu n'as que 9 champs ?
De plus, à quoi correspondent les document.monform1.a1, document.monform1.b, document.monform1.c, ... que tu passes en paramètre à ta fonction deselect1() ?

Par ailleurs, je te déconseille d'utiliser des nombres dans tes noms ou id de champ. Concatène leur une chaine de texte, c'est beaucoup plus facile d'une part de savoir de quoi il s'agit et d'autre part de les manipuler.
Pour moi (et vraisemblablement pour javascript) "elements[2]" correspond au 3ème élément du formulaire (indexation à partir de 0).

Si tes cases se nomment case1, case2, ... tu peux toujours les appeler en javascript : elements['case'+i] et en php ${"case".$i}
Sinon utilise un tableau comme le suggère Cyrano :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 108 Messages

31 oct. 2006, 16:00

merci a tous les 2 de m'avoir aider

je suis arrive a cette solution
function deselectall()
{
	for(var i=1; i<9;i++) 
	{
		if (document.getElementById(i).checked)
		{
			document.getElementById(i).checked = false;
		}
	} 

}
<form name="monform1">
<input type="checkbox" name="1" id="1" value="1" >
<input type="checkbox" name="2" id="2" value="2" >
<input type="checkbox" name="3" id="3" value="3" >
<input type="checkbox" name="4" id="4" value="4" >
<input type="checkbox" name="5" id="5" value="5" >
<input type="checkbox" name="6" id="6" value="6" >
<input type="checkbox" name="7" id="7" value="7" >
<input type="checkbox" name="8" id="8" value="8" >
<input type="checkbox" name="9" id="9" value="9" >
<input type="checkbox" name="all" value ="all" onclick="deselectall()">
</form>
Encore merci :D