2010-04-30 33 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