J'essaye de construire un contrôle multi-sélection à deux niveaux en utilisant ULs emboîtables et jqueryUI sélectionnable.jqueryui sélectionnable avec des listes imbriquées - sélectionner/désélectionner un parent devrait sélectionner/désélectionner tous ses enfants
Actuellement, je restreins les sélections au niveau enfant, mais ce que je veux vraiment, c'est être capable de sélectionner un parent LI et d'avoir toutes ses sélections Child LIs aussi. Pour aller plus loin, je voudrais être en mesure de sélectionner tous les LI Child et d'avoir leur Parent sélectionné. Tout ce qui est inférieur à tous les LI Child sélectionnés entraînerait la non sélection du Parent.
Le balisage de base:
<ul id="theParentList">
<li>Parent 1
<ul>
<li>Child 1.1</li>
<li>Child 1.2</li>
</ul>
</li>
<li>Parent 2
<ul>
<li>Child 2.1</li>
<li>Child 2.2</li>
</ul>
</li>
</ul>
et le javascript actuel:
$('#theParentList').selectable({filter: 'li li'});
Comment pourrais-je accomplir la première partie: la sélection d'un parent choisit l'ensemble de ses enfants?
Merci!
MISE À JOUR:
Je l'ai plus de ce concept actuellement:
Sélection d'un parent choisit l'ensemble de ses enfants;
désélection un enfant désélectionner est parent
Ce qui ne fonctionne toujours pas: Sélection tous les enfants d'un parent doit choisir le parent
Voici ce que j'ai, à ce moment:
Markup:
<ul id="theParentList">
<li class="level-1">
<div>Parent 1</div>
<ul class="level-2">
<li><div>Child 1.1</div></li>
<li><div>Child 1.2</div></li>
</ul>
</li>
<li class="level-1"><div>Parent 2</div>
<ul class="level-2">
<li><div>Child 2.1</div></li>
<li><div>Child 2.2</div></li>
</ul>
</li>
</ul>
et les js:
function SelectSelectableElement (selectableContainer, elementsToSelect){
$(elementsToSelect).not(".ui-selected").addClass("ui-selecting");
}
function handleSelected(){};
function handleSelection (El){
if($(El).parent().hasClass('level-1')){
var ch = $(El).parent().find('.level-2 .ui-selectee');
SelectSelectableElement('#theParentList', ch);
}else{
//this is a level-2 item
//if El and all of it's level-2 siblings are selected, then also select their level-1 parent
}
};
function handleUnselected (El){
if($(El).parent().hasClass('level-1')){
//unselect all of it's children
$(El).parent().children().each(function(){
$(this).find('.ui-selectee').removeClass('ui-selected').addClass('ui-unselected');
});
}else{
//this is a level-2 item, so we need to deselect its level-1 parent
$(El).parents('li.level-1').find(">:first-child").removeClass('ui-selected');
}
};
$('#theParentList').selectable({
filter: 'li div',
selecting: function(event, ui){
handleSelection(ui.selecting);
},
selected: function(event, ui) {
handleSelected(ui.selected);
},
unselected: function(event, ui) {
handleUnselected(ui.unselected);
}
});
est ici un violon: http://jsfiddle.net/JUvTD/
sympa @rocketegg! Je ne vois pas comment le comportement est différent, cependant. Est-ce que vous vous fiez au contexte/à la hiérarchie plutôt qu'à la classe? – rolfsf