2010-11-16 16 views
0

J'utilise le plugin checkboxTree en relation avec le cookie plugin pour jquery. Mon problème est, je voudrais mettre/désactiver tous les cookies des enfants (de l'en-tête) quand une case à cocher avec la classe "en-tête" a été cliquée. Comment puis-je faire cela? Voici mon code .js:Jquery chechboxTree et Cookie plugin - Problème avec les enfants

// When page has loaded, check each checkbox if it's checked (set cookie) or not (unset cookie) 
$(".tree input:checkbox").each(function(){ 
    var elementId = this.id; 

    // Check if a cookie of the element exists 
    if($.cookie(elementId)){ 
    // If so, change attribute to checked 
    $(this).attr("checked", "checked"); 
    }else{ 
    // If not, change attribute to not checked 
    $(this).attr("checked", ""); 
    } 

}); 

$(".tree input:checkbox").change(function(){ 
    if($(this).attr("class") == "header"){ 
    if($(this).is(":checked")){ 
    setCookie(this.id); 
    // Set cookie for all children 
    }else{ 
    unsetCookie(this.id); 
    // Unset cookie for all children 
    } 
    }else{ 
    if($(this).is(":checked")){ 
    setCookie(this.id); 
    }else{ 
    unsetCookie(this.id); 
    } 
    } 
}); 

function setCookie(element){ 
    $.cookie(element, "checked"); 
} 

function unsetCookie(element){ 
    $.cookie(element, null); 
} 


    $('.tree').checkboxTree({ 
    onCheck: { 
     node: 'expand' 
     }, 
     onUncheck: { 
      node: 'collapse' 
     }, 
    collapseImage: '../media/images/icons/minus.png', 
     expandImage: '../media/images/icons/plus.png' 
    }); 

Et voici mon code html:

<div id="filterTree"> 
    <ul class="tree"> 
     <li><input type="checkbox" id="Human Ressources" class="header">Human Resources 
      <ul> 
       <li><input type="checkbox" id="Finance">Finance 
       <li><input type="checkbox" id="Personnel">Personnel 
       <li><input type="checkbox" id="Post Office">Post Office 
       <li><input type="checkbox" id="House Service">House Service 
       <li><input type="checkbox" id="Reception">Reception 
       </ul> 
     </ul> 
    </div> 
+0

Quelle est votre erreur ? Et le dernier attribut de l'objet ne devrait pas avoir de "," après. –

+0

Je ne reçois pas d'erreur. Jusqu'à ici, ça fonctionne très bien, mais je voudrais mettre/désactiver tous les cookies enfants quand un en-tête a été cliqué. "Définir des cookies pour tous les enfants" il devrait y avoir une fonction, qui définit tous les cookies pour les enfants. Et dans "Développer cookie pour tous les enfants" le même mais non réglé et non défini. –

+0

Lorsque l'en-tête a été changé en "cochée", j'aimerais ajouter les cookies suivants: Finances, Personnel, Bureau de poste, Service de la maison et Réception. Lorsque l'en-tête est passé à "non coché", je souhaite supprimer ces cookies. Mais je ne sais pas comment puis-je obtenir tous les enfants et mettre/désactiver pour chaque enfant le cookie. Comprenez-vous ce que je veux dire? –

Répondre

0
if($(this).attr("class") == "header"){ 
    //selects all input of the type checkbox that are within the ul li elements, each loops trough the list of those elements 
    $(this).parents("ul.tree").find("ul li input:checkbox").each(function() { 
     if($(this).is(":checked")){ //if this item of the list is checked set a cookie, otherwise unset it. 
     setCookie(this.id); 
     } 
     else { 
     unsetCookie(this.id); 
     } 
    }); 
    } 

et retirez le "" à la fin de

expandImage: '../media/images/icons/plus.png', 
+0

Malheureusement, cela ne fonctionne pas. Aussi, je pense que vous avez oublié le ");" après chaque fonction (je les ai ajouté)? Lorsque je clique sur la case à cocher avec l'en-tête de classe, toutes les cases à cocher sont cochées ou non cochées (provenant du plugin checkboxTree). Lorsque vous actualisez le site, les cases à cocher ne sont pas cochées/ne sont pas cochées comme avant (c'est pourquoi j'ai utilisé des cookies pour enregistrer les paramètres). J'espère que vous pouvez m'aider :) (J'ai enlevé le ","). –

+0

Idd je l'ai oublié. Le fixe maintenant. Vous êtes sûr que les fonctions des cookies fonctionnent bien? Cela a fonctionné avec 1 élément? –

+0

:) Cela fonctionne absolument bien pour un ou plusieurs éléments. Seule la "fonction d'en-tête" ne fonctionne pas. Je pense que (this) .children ("input: checkbox") n'obtient pas l'élément car j'ai ajouté une alerte avant la fonction mais elle ne renvoie qu'undefinied: alert ($ (this) .children ("input: checkbox") .attr ("id")); –