Mik*_*ike 11 javascript jquery closures
谁能告诉我这里做错了什么?我在下面简化了它,但我基本上试图创建一个列表,并有一个click事件,它引用一个仅在循环中可用的变量.
for (var i = 0; i < data.length; i++) {
$newRow = $(rowFormat);
$('a:first', $newRow).click(function(i){
return function() { alert(i); }
});
$list.append($newRow);
}
Run Code Online (Sandbox Code Playgroud)
Que*_*tin 14
你没有调用外部函数.
$('a:first', $newRow).click(function(j){
return function() { alert(j); }
}(i)); /* Pay special attention to this line, it is where the major change is */
Run Code Online (Sandbox Code Playgroud)
正如TJ Crowder所提到的,你可以将工厂移出循环.
function my_factory(j) {
return function() {
alert(j);
};
}
$('a:first', $newRow).click(my_factory(i));
Run Code Online (Sandbox Code Playgroud)