我有一个for循环,它不会将它的 i 变量或任何类型的变量传递给编码为每个循环运行的Jquery函数。
for (var i = 0; i < result.length; i++) {
$('#frame-' + i + '').fadeOut(function () {
ALERT(i);
document.getElementById('frame-' + i + '').getElementsByTagName('img')[0].src = 'img/' + result.cat[i].id + '.png';
});
$('#frame-' + i + '').fadeIn();
}
我发现我可以使用.on或.bind函数,但我不知道如何使用fadeOut()。
fadeOut.on()不起作用。
有任何建议让这个工作吗?
答案 0 :(得分:2)
再次关闭!!!
$.each(result, function (i, res) {
$('#frame-' + i + '').fadeOut(function () {
alert(i);
$(this).find('img').get(0).attr('src', 'img/' + res.cat.id + '.png');
}).fadeIn();
})
答案 1 :(得分:2)
问题是当你的fadeOut完成时,for循环已经完成,因此,淡入淡出代码正在读取的i
的值将始终相同(最后一个值)。 / p>
创建一个闭包以传递i
的值。这为您提供了i
的本地副本,它不会被for循环覆盖。同时将ALERT()
更改为alert()
(Javascript区分大小写)。
for (var i = 0; i < result.length; i++) {
(function(i){
$('#frame-' + i).fadeOut(function () {
alert(i);
document.getElementById('frame-' + i + '').getElementsByTagName('img')[0].src = 'img/' + result.cat[i].id + '.png';
}).fadeIn();
})(i);
}