Javascript 对于循环和动画,可以';不要使用变量,因为因闭包而更改
我有以下代码:Javascript 对于循环和动画,可以';不要使用变量,因为因闭包而更改,javascript,jquery,scope,Javascript,Jquery,Scope,我有以下代码: var newTR = '<tr class=".small"></tr>'; var i=300, v=0; for (var product in products){ i=i+300; v++; var newTD+v = '<td>'+'img'+'</td>'+ '<td>'+prod
var newTR = '<tr class=".small"></tr>';
var i=300, v=0;
for (var product in products){
i=i+300;
v++;
var newTD+v =
'<td>'+'img'+'</td>'+
'<td>'+products[product].partNumber + ' ' + products[product].description+'</td>'+
'<td class="productPrice">' + toDollars(products[product].price) + '</td>'+
'<td class="productQty">'+products[product].qty+'</td>'+
'<td>'+ products[product].price * products[product].qty+'</td>'+
'<td><button class="removeProductClass">x</button></td>';
$(newTR)
.delay(i)
.insertAfter(self.cartTableHeader)
.switchClass( "small", "big", 500, "easeInOutQuad")
.queue(function(){
$(this).append(newTD)
.children()
.hide()
.fadeTo(1000, 1);
$(this).dequeue();
})
.queue(function(){
self.calcSubTotal();
$(this).dequeue();
});
}
}
var newTR='';
var i=300,v=0;
用于(产品中的var产品){
i=i+300;
v++;
var newTD+v=
“+”img“+”+
''+产品[产品]。零件号+''+产品[产品]。说明+''+
''+美元(产品[产品].价格)+''+
''+产品[产品].数量+''+
''+产品[产品]。价格*产品[产品]。数量+''+
“x”;
美元(新台币)
.延迟(i)
.insertAfter(self.cartTableHeader)
.switchClass(“小”、“大”、500、“易用室外”)
.queue(函数(){
$(this).append(newTD)
.儿童()
.hide()
.fadeTo(1000,1);
$(this.dequeue();
})
.queue(函数(){
self.calcSubTotal();
$(this.dequeue();
});
}
}
问题是newTD变量的值是相同的
因为闭包使用的是在newTD上设置的最后一个值
由于动画发生较晚,当for循环已完成时
如何克服这一点(
谢谢你的阅读
Sean.将有问题的代码封装在一个自动执行函数中,如下所示:
(function(newTD){
$(newTR)
.delay(i)
.insertAfter(self.cartTableHeader)
.switchClass( "small", "big", 500, "easeInOutQuad")
.queue(function(){
$(this).append(newTD)
.children()
.hide()
.fadeTo(1000, 1);
$(this).dequeue();
})
.queue(function(){
self.calcSubTotal();
$(this).dequeue();
});
})(newTD);
您需要使用当前值newTD和任何其他要传递的数据调用函数,然后使用该信息调用延迟。
var newTD+v=
的语法无效。实际上,我在这里没有看到任何闭包?如果您在正确的位置使用了闭包,它会工作的。嗨,Bergi,是的,因为newTD的值正在下降,所以存在闭包进入所有队列函数,公开最后一个值集。