Jquery Vérifier parent cases à cocher dans les ul li
J'ai un script qui va cocher et décocher tous les enfants des cases à cocher dans une liste imbriquée. Je suis maintenant essayer de l'obtenir afin que je puisse vérifier un niveau bas de case à cocher et il va vérifier tous les parents le font qu'au plus haut niveau. Voici un JSFiddle
<ul class="tree" id="tree">
<li><input type="checkbox" name="account_settings" value="yes">Account Settings <!-- AND SHOULD CHECK HERE -->
<ul>
<li><input type="checkbox" name="one" value="one">AS One</li>
<li><input type="checkbox" name="two" value="two">AS Two</li>
<li><input type="checkbox" name="user_roles" value="user_roles">Users & Roles <!-- SHOULD CHECK HERE -->
<ul>
<li><input type="checkbox" name="user_role" value="add">Add</li>
<li><input type="checkbox" name="user_role" value="delete">Delete</li> <!-- CHECK HERE -->
</ul>
</li>
</ul>
</li>
<li><input type="checkbox" name="rl_module" value="yes">RL Module</li>
<li><input type="checkbox" name="rl_module" value="yes">Accounting
<ul>
<li><input type="checkbox" name="vat" value="yes">VAT</li>
<li><input type="checkbox" name="bank_account" value="yes">Banking
<ul>
<li><input type="checkbox" name="view" value="yes">View</li>
<li><input type="checkbox" name="crud" value="yes">CRUD</li>
</ul>
</li>
</ul>
</li>
</ul>
Et le javascript correspondant:
$('input[type=checkbox]').click(function(){
//if is checked
if($(this).is(':checked')){
//check all children
$(this).parent().find('li input[type=checkbox]').prop('checked', true);
//check all parents
$(this).parent().prev().prop('checked', true);
} else {
//uncheck all children
$(this).parent().find('li input[type=checkbox]').prop('checked', false);
}
});
- Donc, si je comprends bien, vous voulez inverse de ce qu'il fait maintenant. Vous souhaitez vérifier tous les parents boîtes au moment de la vérification d'un enfant de la boîte.
- Oui donc c'est comme un des privilèges de réglage. Vous avez besoin du parent d'être actif, mais pas le frère
- Les enfants encore vérifiées, ou que la fonctionnalité devrait être supprimé?
- Si vous cliquez sur Utilisateurs & les Rôles. Tous les enfants devraient être cochée ou décochée. La Comptabilité doit être cochée.
- Lorsque vous décochez un enfant, faut-il décocher ses parents aussi? Et si il ne, faut-il décocher le parent que si c'est le dernier de la fratrie cochée, ou décochez tous ses frères et sœurs et les parents automatiquement? En gros, est-ce correct si les Paramètres de Compte est vérifié avec aucun de ses enfants cochée, ou il ne doit rester cochée si au moins un de ses enfants sont toujours vérifiées?
- Si tous les enfants ne sont pas cochées, puis le parent direct doit être désactivée trop. Les Paramètres de compte va vérifier tous les enfants, mais si vous la décochez, de la plus basse enfant sauvegarder puis paramètres du Compte doit décocher quand les enfants ne sont pas sélectionnés.
Vous devez vous connecter pour publier un commentaire.
Il semble que vous voulez quelque chose de ce genre
VIOLON
Si vous voulez vérifier en haut et en bas de la hiérarchie - vous pouvez le faire comme ceci
VIOLON
Cela devrait le faire:
jsFiddle exemple
Dernière mise à jour poignées en haut et en bas de la hiérarchie, et les frères et sœurs.
#tree
.Suffit d'utiliser
jquery.parents()
. Il est quelque peu similaire à find (), sauf qu'il recherche tous les parents. Quelque chose comme cela pourrait être proche de ce que vous êtes à la recherche pour:Voir http://api.jquery.com/parents/ pour plus d'informations.
EDIT: Bon, voici une solution qui fonctionne:
http://jsfiddle.net/3y3Pb/12/
EDIT2: Et plus simple solution ici:
http://jsfiddle.net/3y3Pb/14/
$(this).parents('li').children('input[type="checkbox"]').prop('checked', true);
comme ceci: jsfiddle.net/3y3Pb/13.each()
?Ont un JSFiddle: http://jsfiddle.net/3y3Pb/16/
Je voudrais recommander l'ajout d'un attribut parent pour les cases à cocher. Cet attribut parent fera référence à la mère de la case à cocher id de sorte que vous n'avez pas à vous soucier de votre modification de structure:
Ex:
Vous pouvez utiliser
prevAll()
aussiJ'ai le même problème. Dans mon cas, il y a plusieurs cases li avec des étiquettes, et chaque case au-dessus de la cible ont la classe
parent
(générés en js)