Оценка значения переменной функции jQuery во время определения этой функции - PullRequest
0 голосов
/ 30 апреля 2010

У меня есть большое количество строк в таблице, в которые я хочу прикрепить уникальный палитру цветов (плагин 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 это относится, как я могу оценить переменную во время объявление / определение функции?

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

Брайан.

1 Ответ

2 голосов
/ 30 апреля 2010

Вы можете сделать это:

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

Функция $.each() создает замыкание , поэтому передаваемая вами переменная (row) - это ее собственная копия, правильно выделенная для того, что вам нужно, i - это то, что было в конце цикла for(), и ваша функция получает последний элемент этого массива.

...