1

はっきりと見るにはまだ十分なコーヒーがなかったと確信しています。これは些細なことのように思えますが、jQuery プラグインでいくつかの関数を渡す for ループがあります。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 を「コピー」して、期待どおりに返されるようにするにはどうすればよいですか? 回避策はありますが、知りたいので、頭を砂に入れます。

4

1 に答える 1

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