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()
函数应为for循环中的10个产品中的每一个产生output
div容器。
我的问题是:
调用request()
函数完成后,当执行回调函数时,是否已创建所有10个div容器,或者只有box[i]
的那个是那时创造了吗?
答案 0 :(得分:1)
您尝试使用closure in the loop是正确的,但您使用了错误的变量名称 - 它应该是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
的选择应该已经移到了循环之外。
答案 1 :(得分:0)
我认为只有box [i]才会在那时创建。对于创建完所有的回调,您可以使用jQuery的promise和deffered system see here(multiple)。或者您可以在代码中维护一个计数器,这样只有在达到目标10后才能执行某些代码。
也许是这样的 var target = 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)
}