我确信我还没有足够的咖啡看清楚,这看起来微不足道,但是,我有一个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
}
});
}
Run Code Online (Sandbox Code Playgroud)
我如何"复制"我,所以它按照我的期望返回?我有一个解决方法,但我很想知道,所以我可以把头放在沙子里.
这是众所周知的循环问题.你必须每次将它包装在一个闭包中:
for (var i = 1; i < 4; i++)(function(i) {
$('#div' + i).plugin({
onDelete: function() {
alert("Deleting #" + i);
}
});
})(i);
Run Code Online (Sandbox Code Playgroud)
或者您可以使用此:
for (var i = 1; i < 4; i++) {
$('#div' + i).plugin({
onDelete: callback(i)
});
};
function callback(i) {
return function() {
alert("Deleting #" + i);
};
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
257 次 |
| 最近记录: |