我确信我还没有足够的咖啡看清楚,这看起来微不足道,但是,我有一个for循环,它传递了jQuery插件中的一些函数。 var i被传递,当然,传递i的最后一个值,而不是传递时分配的值。
for (var i = 1; i < 3 + 1; i++) {
$('#div' + i).plugin({ // i returns correctly here
onDelete: function () {
alert("Deleting #" + i); // i returns 4 every time - last value of i
}
});
}
我如何“复制”i,所以按照我的预期返回?我有一个解决方法,但我很想知道,所以我可以把头放在沙子里。
答案 0 :(得分:6)
这是众所周知的循环问题。每次都必须将它包装在一个闭包中:
for (var i = 1; i < 4; i++)(function(i) {
$('#div' + i).plugin({
onDelete: function() {
alert("Deleting #" + i);
}
});
})(i);
或者你可以使用它:
for (var i = 1; i < 4; i++) {
$('#div' + i).plugin({
onDelete: callback(i)
});
};
function callback(i) {
return function() {
alert("Deleting #" + i);
};
}