2

私はこのようなテストコードをいくつか作成しました。

var selects = [$('#elem1'), $('#elem2'), $('#elem3')];

$.each(selects, function(item){
    selects[item].bind('click', function(){
        console.log("each function : " + item);
    });
});

for(var i = 0; i < selects.length; i++){
    var elem = selects[i];
    elem.bind('click', function(e){
        console.log("for loop : " + i);
    });
}

イベントにバインドするボタンを3つ作成しました。とテスト

「elem1」という名前で識別されるボタンをクリックすると、結果は次のようになります。

console $
each function : 0
for loop : 3

また、「elem2」という名前で識別されるボタンをクリックすると、結果は次のようになります。

console $
each function : 1
for loop : 3

2つのループの例の間で何が起こりましたか?私にお知らせください。

ありがとう、よい一日を。

4

1 に答える 1

0

i値ではなく、カウンタ変数自体を参照します。値で渡す必要があります:

for(var i = 0; i < selects.length; i++){
    var elem = selects[i];

    (function(i) {
        elem.bind('click', function(e) {
            console.log("for loop : " + i);
        });
    })(i);
}

i無名関数のシャドウイングがそれを行います。

于 2013-03-19T02:25:16.043 に答える