2010-04-30 2 views
0

У меня есть большое количество строк в таблице, в которой я хочу присоединить уникальный цветной пиксель (плагин 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 [я] + «currentcolour») компонент возникает в момент, когда функция называется, а не когда она определена (которая мне нужна).

Учитывая, что этот плагин Javascript добавляет свой код на уровне, а не основной компонент DOM, что я доступ выше поэтому не может получить то, что идентификатор это относится к, как я могу оценить переменную во объявлении функции/определение?

Спасибо за любую помощь/понимание, которое может дать любой.

Брайан.

ответ

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

Смежные вопросы