checkbox générale

VaN
Mammouth du PHP | 1107 Messages

06 avr. 2006, 19:08

Bonjour à tous,

mon problème est simple, et sa solution doit l'être aussi j'imagine.
Une image vaut mille mots, dit-on, alors là voici :

Image

Comme on le voit sur cette oeuvre d'art, on distingue deux types d'éléments, les éléments "mère", et les éléments "filles".

J'aimerais, que lorsque je coche la checkbox d'un élément mère, les checkbox filles se cochent automatiquement. Et de meme pour le decochage.

Une solution ? une piste ?

Bien le bonsoir chez vous.

VaN
Mammouth du PHP | 1107 Messages

07 avr. 2006, 17:56

vraiment pas ? : /

Mammouth du PHP | 19672 Messages

07 avr. 2006, 20:50

Il faudrait explorer du coté du DOM (Document Object Model) de façon à pointer vers des élément précis. Ensuite, avec un évènement onclick sur la case parente, tu pourrais déclencher une fonction qui cocherait les cases filles.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 656 Messages

07 avr. 2006, 21:08

Voilà c'est ce que je ferais aussi.

Code : Tout sélectionner

function checkOne() { if (getElementById("counterStrike").checked == true) { getElementById("counterStrikeDotNet").checked == true; } else { getElementById("counterStrikeDotNet").checked == false; } }

Mammouth du PHP | 19672 Messages

07 avr. 2006, 21:18

C'est pas bon ça Ultiny : ça voudrait dire que toutes les cases filles on la même valeur d'attribut id, ce qui est non conforme et invalide. Explorer via le DOM avec getElementByTagName('input') pour cherchers les éléments enfants de l'élément parent qu'on va par contre effectivement repérer avec getElementById(), serait peut-être plus approprié :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 656 Messages

13 avr. 2006, 19:10

Mais là dans mon example j'allais pas me taper toutes les cases. J'en ai juste fait une.

Mammouth du PHP | 19672 Messages

13 avr. 2006, 23:45

ben tu n'aurais pas besoin de rallonger le code pour faire un nombre indéterminé de case avec une boucle et un système d'identification incrémental. Tu n'imagines tout de même pas devoir retoucher ton code chaque fois que tu dois rajouter un sous-menu ?

Enfin voilà, ce sont des indices, bon dev ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 656 Messages

15 avr. 2006, 18:50

Si moi je mets une instruction par case, j'aime bien m'y retrouver :p

C'est vrai que c'est pas idiot de faire une boucle, sauf que je ne saurais pas comment delimiter le nombre de tours à faire.

Par exemple si je lui mets un for, il va tourner 10 fois par exemple alors que y'aurais que 5 cases et donc generer 5 erreurs.

Mammouth du PHP | 19672 Messages

15 avr. 2006, 19:03

Et pourquoi ne pas songer au foreach() :?:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 656 Messages

15 avr. 2006, 21:50

C'est amusant, on parle de JS et j'ai la doc du foreach de PHP :P

Ce que tu propose m'interesse beaucoup Cyrano. Pourait tu me faire un exemple s'il te plait?

Mammouth du PHP | 19672 Messages

15 avr. 2006, 23:07

Autant pour moi, je pensais PHP, mais il existe une alternative assez proche en JavaScript :

Code : Tout sélectionner

for(var in var_tableau) { //...etc.. }
Un article intéresssant sur le sujet à lire ICI
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 656 Messages

15 avr. 2006, 23:46

Je ne parlais pas pour toi, mais pour le lien automatique sur la fonction... [-X foreach dans ton post plus haut.

Mais alors ça change rien, tes obligé de spécifier quelque par le nombre de box?

Je ne peux pas faire par exemple :

<input type="checkbox" id="box[]" />
<input type="checkbox" id="box[]" />
<input type="checkbox" id="box[]" />

Puis ensuite parcourir box pour cocher les cases?

Invité
Invité n'ayant pas de compte PHPfrance

18 avr. 2006, 12:51

Je n'y comprends pas grand chose. Je n'arrive pas à trouver comment démarrer.

Code : Tout sélectionner

for(var in var_tableau) { //...etc.. }
à quoi correspondent var et var_tableau ?[/quote]

VaN
Mammouth du PHP | 1107 Messages

18 avr. 2006, 12:52

C'est moi qui vient d'ecrire le post juste au dessus, oublié de me relog.

VaN
Mammouth du PHP | 1107 Messages

20 avr. 2006, 11:34

Je viens de trouver ce script, qui semble marcher, mais je n'arrive pas à l'appliquer à mon menu.

Quelqu'un pourrait m'apporter un peu d'aide s'il vous plait ?

Code : Tout sélectionner

<script type="text/javascript"> function ta() { for (i=0; i<formu.length; i++) { mesbox = formu.elements[i]; mesbox.checked = formu.tousaucuns.checked; } } </script>

Code : Tout sélectionner

<input type="checkbox" name="tousaucuns" value="tous/aucuns" onclick="ta();"> tous/aucuns<br> <input type="checkbox" name="check1" value="1"> 1<br> <input type="checkbox" name="check2" value="2"> 2<br> <input type="checkbox" name="check3" value="1"> 3<br> <input type="checkbox" name="check4" value="2"> 4<br> <input type="checkbox" name="check5" value="1"> 5<br>
Mon menu est crée dynamiquement, de la façon suivante :
<ul class="menu">
<?php
$sql = 	"SELECT * FROM categories";
$query = mysql_query($sql);

while($result = mysql_fetch_array($query))
{
	$sql2 = "SELECT * FROM contacts WHERE contact_cat_id = '".$result['cat_id']."'";
	$query2 = mysql_query($sql2);
	$rows2 = mysql_num_rows($query2);
	
	echo "<li><img src=\"images/plus.gif\" onclick=\"expand(this)\" align=\"absmiddle\" /><input type=\"checkbox\" name=\"cat_destinataire\" value=\"".$result['cat_id']."\">".$result['cat_nom'];
	if($rows2 > 0)
	{
		echo "<ul>";
		while($result2 = mysql_fetch_array($query2))
		{
		
			echo "<li><input type=\"checkbox\" name=\"contact[]\" value=\"".$result2['contact_mail']."\">".$result2['contact_url']."<a href=\"fiche.php?id=".$result2['contact_id']."\"><img src=\"images/fiche.gif\" align=\"absmiddle\" border=\"0\" style=\"margin-left:5px;\"></a></li>";
		
		}
		echo "</ul>";
	}
	echo "</li>";
}
?>
	</ul>
pour donner ça :

Image