0
for (var i=0; i<10; i++) {
    var box = $('div.container');

    (function(x) {
        request(box[i], function(n) {    
            //question about function(n) here
        }
    })(i)
}

function request(boxContainer, callback) {
    $.getJSON(url, function(data) {
        //dataArray is created here
    }

    boxContainer.innerHTML = '';

    $.each(dataArray, function(idx, v){
        boxContainer.innerHTML += '<div class="output"><h4>..</h4><p>..</p></div>';
    }

    callback(data);
}

このrequest()関数はoutput、forループ内の10個の製品のそれぞれに対してdivコンテナーを生成する必要があります。

私の質問は:

呼び出し元のrequest()関数が完了した後、コールバック関数が実行される時間になると、10個のdivコンテナーがすべて作成されたのbox[i]でしょうか、それともその時点で1つだけが作成されたのでしょうか。

4

2 に答える 2

1

ループでクロージャを使用する試みは正しかったのですが、間違った変数名を使用しました-そうではxないはずですi

for (var i=0; i<10; i++) {
    var box = $('div.container');

    (function(x) {
        request(box[x], function(n) {    
            //question about function(n) here
        }
    })(i)
}

ところで、あなたの選択boxはループの外に移動されるべきでした。

于 2013-02-06T16:38:00.983 に答える
0

その時点でbox[i]用に作成されたのはそれだけだと思います。すべてが作成された後のコールバックについては、jQueryのpromiseとdefferedシステムのいずれかを使用できます複数)。または、コード内にカウンターを維持して、目標の10に達した後にのみコードを実行することもできます。

たぶんこのvartarget= counter = 10、data={};のように for(var i = 0; i

    (function(x) {
        request(box[x], function(n) {
            data[x] = n;
            if(--counter == 0) {
                //all are done
            }
        }
    })(i)
}
于 2013-02-06T16:29:56.190 に答える