For循环不会将i变量传递给循环内的Jquery函数

时间:2013-10-24 11:05:00

标签: javascript jquery for-loop

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

有任何建议让这个工作吗?

2 个答案:

答案 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);
}