0

我有一个 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() 不起作用。

有什么建议可以让它工作吗?

4

2 回答 2

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();
})
于 2013-10-24T11:08:15.310 回答
2

问题是当你的 fadeOut 完成时,for 循环已经完成,因此,ifade 代码正在读取的值将始终相同(最后一个值)。

创建一个闭包来传递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);
}
于 2013-10-24T11:23:04.533 回答