fonction find

Jax
Invité n'ayant pas de compte PHPfrance

17 mai 2011, 17:57

Bonjour,

Je voudrais faire une chose qui parait simple en jquery mais je ne comprend pas tout. Je viens d'apprendre ce langage sur le tas. Je voudrais bien un petit coup demain.
J'ai un système de checkbox père fils. Quand on clique sur le père , tous les fils apparaissent cochés. En fait, je veux séparer les deux taches. Avec une checkbox qui fait apparaitre tous les fils. Et une autre qui quand on clique dessus, cochent tous les fils.

Donc je rajoute une checkbox appelé ici coche_tout_fils.
while ($row1 = mysql_fetch_object($query_test)) {	
		
	?>

		<li>
                                <input type="checkbox" class="checkbox" name="coche_tout_fils"
		
				<input type="checkbox" class="checkbox coche" name="menu[]" value="<?php echo $row1->id_            ect ect...  // MENU PERE


<input type="checkbox" class="checkbox coche" name="menu[]" value="<?php echo $row2->id_eap;?>"   // ect ect MENU FILS

Code jquery d'origine qui quand on clique sur le père, tous les fils apparaissent et apparaissent cochés.
		 <script type="text/javascript">
			$(function (){
			  $('ul#menu_selection li ul').addClass('hide');
			 
			  $('ul#menu_selection > li input[type="checkbox"]').click(function () {
				 $(this).parent().find('ul').toggleClass('hide');


			$(this).siblings('ul').find('input:checkbox').each(function (i, item) {
					$(item)[0].checked = !$(item)[0].checked;
						});



			  });
			});

			
		 </script>
Je voudrai que les checkboxs apparaissent coché seulement si on coche la case coche_tout_fils.
Comment dois je adapter le jquery pour que cela fonctionne. J'ai essayé $(this).siblings('ul').find('PLEIN DE CHOSES').each(function (i, item) {
Il faudrait que je trouve dans le find("PLEIN DE CHOSES") >> un moyen de lui dire " fonctionne que pour la checkbox coche_tout_fils". J'ai essayé bcp de choses sans succès

Merci d avance

Mammouth du PHP | 661 Messages

17 mai 2011, 19:08

salut ::

une chose pour apprendre :: il faut bien identifier ce qui se passe et sur koi tu travail :

sais tu à quoi correspond $(this).siblings('ul').find('input:checkbox') ??

(avec firebug) en fesant un console.log($(this).siblings('ul').find('input:checkbox')) tu comprendrais vite qu'il te retourne une collection de tes checkbox.

la méthode each permet d'appliquer une fonction à l'ensemble des éléments de ce tableau
Pour chaque item tu leur donnes la valeur checked (bool) correspondant à !$(item)[0].checked; => soit : "son inverse" !

donc si tu veux que $(item)[0].checked soit égale = $('nomElement').checked => à toi de faire en sorte de définir correctement $('nomElement')

regardes du coté de la doc pour analyser le comportement de toutes les methodes dont $()

Je ne suis pas habitué à jQuery, mais je penses qu'il doit bien y avoir un truc du style : $('input[name=coche_tout_fils]') qui pourra te retourner l'élément recherché

@++

devlop78
Invité n'ayant pas de compte PHPfrance

18 mai 2011, 02:10

Pour une structure hierarchisée avec des li :

Code : Tout sélectionner

$("#grandPapa.ul").children('li input[checked='checked']").find('input[type='checkbox']").attr('checked','checked');
Ca ne fonctionnera peut-être pas comme ça, mais l'idée est là.