2009-09-01 7 views
0

Comment puis-je passer un paramètre à une fonction iterator jquery (ou tout ce qu'ils sont appelés), comme:jquery paramètres de la fonction iterator

var states = new Array(); 
    states.push(true); 

    $(children).each(function(states) { 
     if(this.depth>states.length) 
     { 
      states.push(this.collapsed); 
     } 
     else if (this.depth<states.length) 
     { 
      states.pop(); 
     } 

     var collapsed=states[states.length-1]; 
    } 
    ); 

Le paramètre « états » arrive soit comme un entier ou un booléen, jamais un tableau. Suggestions? Je préférerais ne pas déclarer les états comme globaux. (Le code ci-dessus réside à l'intérieur d'une méthode).

Répondre

3

le code pourrait simplement utiliser states comme fermeture; vous pouvez déclarer states localement à la méthode parente, puis le référencer à partir de la fonction anonyme que vous transmettez à each. En fait, en l'absence d'autres insectes que je ne vois pas, vous pouvez simplement changer

$(children).each(function(states) { 

à

$(children).each(function() { 

et il travaillerait, sans globale.

2
getEachCallback = function(states) { 
    return function() { 
    if(this.depth>states.length) 
    { 
     states.push(this.collapsed); 
    } 
    else if (this.depth<states.length) 
    { 
     states.pop(); 
    } 

    var collapsed=states[states.length-1]; 

    }; 
}; 

$(children).each(getEachCallback (states)); 
+0

ne pas oublier de points-virgules la fin de votre déclaration de variable et retour déclaration (les deuxième et troisième dernières lignes), ou JSLint blessera vos sentiments;) J'aime la déclaration «stackwise» de la variable states. –

+0

@DDaviesBrackett: Qu'est-ce que JSLint? Vous voulez dire getEachCallback = function (states) {return function() {};}; ??? –

+0

oui, c'est ce que je voulais dire - jslint est www.jslint.com, qui est un mécanisme pour désinfecter JS afin que vous ne vous tirez pas accidentellement dans le pied. –

0

Le paramètre de la fonction $ .each() n'est pas le tableau lui-même, mais l'index de l'élément en cours. Si vous êtes en train de pousser et de sauter, vous n'avez pas besoin de cela, alors laissez simplement le paramètre entièrement.

états seront disponibles à la fonction anonyme intérieure parce qu'elle est une fermeture, vous devriez donc être bien fonction de changement (états) à la fonction()

Questions connexes