2010-04-30 32 views
0

我在表中有大量的行,我希望在该表中有一个独特的colorpicker(jQuery插件)附加到由唯一标识符标识的特定列中的每个单元格。鉴于此,我想生成自动化的ColorPicker的实例如下:在定义该函数期间对jQuery函数变量值的评估

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); 
     } 
}); 

现在,这并不工作,因为$的评价(“#” + myrows [I] +“currentcolour”)组件发生在函数为时称为,而不是当它被定义时(这是我需要的)。

鉴于此插件JavaScript将其代码追加到级别而不是我上面访问的底层DOM组件,所以无法派生出与此相关的ID,如何在期间评估变量函数声明/定义?

感谢任何人的帮助/见解。

Brian。

回答

2

你可以这样做:

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

$.each()功能creates a closure,所以你传递(row)的变量是它自己的拷贝正确作用域为你想要的这里,而不是i是什么它在for()循环的最后,并且你的函数获得了该数组的最后一个元素。

+0

太棒了 - 非常感谢你。 – nroam 2010-04-30 19:14:37