У меня есть этот код JavaScript:
for (var idx in data) {
var row = $("<tr></tr>");
row.click(function() { alert(idx); });
table.append(row);
}
Итак, я просматриваю массив, динамически создавая строки (часть, в которой я создаю ячейки, опущена, поскольку это не важно).Важно, чтобы я создал новую функцию, которая заключает в себе переменную idx.
Тем не менее, idx является только ссылкой, поэтому в конце цикла все строки имеют одинаковую функцию и все оповещают об одном и том же значении.
В настоящий момент я могу решить эту проблему следующим образом:
function GetRowClickFunction(idx){
return function() { alert(idx); }
}
, и в коде вызова я звоню
row.click(GetRowClickFunction(idx));
Это работает, но несколько уродливо,Интересно, есть ли лучший способ просто скопировать текущее значение idx внутри цикла?
Хотя сама проблема не является специфичной для jQuery (она связана с замыканиями / областями JavaScript), я использую jQuery и, следовательно,Решение jQuery-only хорошо, если оно работает.