1

我确信我根本没有足够的咖啡来清楚地看到,这似乎微不足道,但是,我有一个 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
        }
    });
}

我如何“复制”我,所以它按我的预期返回?我有一个解决方法,但我很想知道,所以我可以把头埋在沙子里。

4

1 回答 1

6

这是一个众所周知的 for 循环问题。每次都必须将其包装在一个闭包中:

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);
    };
}
于 2013-02-19T14:17:03.710 回答