2010-04-30 3 views
0

J'ai un grand nombre de lignes dans un tableau dans lequel je souhaite joindre un colorpicker unique (plugin jQuery) pour chaque cellule dans une colonne particulière identifiée par ids uniques. Compte tenu de cela, je veux automatiser la génération des instances du colorpicker comme suit:évaluation de la valeur variable de fonction jQuery lors de la définition de cette fonction

var myrows={"a","b","c",.....} 
var mycolours={"ffffff","fcdfcd","123123"...} 

for (var i=0;i<myrows.length;i++) { 
    $("#"+myrows[i]+"colour").ColorPicker({flat: false, 
    color: mycolours[i], 
    onChange: function (hsb, hex, rgb) { 
     $("#"+myrows[i]+"currentcolour").css('backgroundColor', '#' + hex); 
     } 
}); 

Maintenant, cela ne fonctionne pas parce que l'évaluation de la $ ("#" + myrows [i] + "currentcolour") composants se produit au moment où la fonction est appelée , pas quand elle est définie (qui veux que j'ai besoin).

Étant donné que ce plugin javascript ajoute son code au niveau et non à la composante DOM sous-jacent auquel j'accède ci-dessus ne peut donc pas déduire ce id cela concerne, comment puis-je évaluer la variable au cours de la déclaration de fonction/définition?

Merci pour toute aide n'importe qui/insight peut donner.

Brian.

Répondre

2

Vous pouvez le faire:

$.each(myrows, function(i, row) { 
    $("#"+row+"colour").ColorPicker({flat: false, 
    color: mycolours[i], 
    onChange: function (hsb, hex, rgb) { 
     $("#"+row+"currentcolour").css('backgroundColor', '#' + hex); 
    } 
    }); 
}); 

La fonction $.each()creates a closure, donc la variable que vous êtes de passage dans (row) est sa propre copie correctement scope pour ce que vous voulez ici, au lieu de l'i étant ce que il était à la fin de la boucle for() et votre fonction obtenir le dernier élément de ce tableau.

+0

Impressionnant - merci beaucoup. – nroam

Questions connexes