将值传递给fadeOut回调函数

时间:2011-01-12 09:21:28

标签: jquery

我正在尝试做的是获取徽标的记录集,必须使用数组。 1:用于显示 2:银行

我将显示10个徽标 在延迟我将取代他们。来自银行的下一个10

for (var i=0;i<=10;i+=1){
    $("#footerlogo-"+(i+1)).hide().append(DisplayArr[i]).fadeIn();
}


function ReplaceFooterLogos() {
    var runon = 0;
    var tempholder = "";
    for (var i=0;i<=10;i+=1){
        $("#footerlogo-"+(i+1)+"").fadeOut("fast",function(i){
            BankArr.push(DisplayArr.shift());
            DisplayArr.unshift(BankArr.shift());
            $(this).html(DisplayArr[i]).fadeIn()
        });
    }
    $("#mycarousel").delay(5000,function() { ReplaceFooterLogos() });
}

$("#mycarousel").delay(5000,function() { ReplaceFooterLogos() });

忽略延迟功能 - 我拥有它!

我的问题是为什么我的变量i未定义?以及如何将值传递给回调?

1 个答案:

答案 0 :(得分:2)

  

我的问题是为什么我的变量i未定义?

我怀疑你会发现它的DisplayArr[i]未定义。 i。

当你创建一个闭包(这是你的11回调是什么)时,它有一个持久引用到变量,而不是在该时间点复制变量值。因此,所有回调都将看到相同的fadeOut值,这将是循环结束后的值(i)。我猜测那里没有11。 (关于闭包的更多信息:Closures are not complicated。)

以下是解决问题的方法:

DisplayArr[11]

我们在那里使用工厂函数来构建function ReplaceFooterLogos() { var runon = 0; var tempholder = ""; for (var i=0;i<=10;i+=1){ $("#footerlogo-"+(i+1)+"").fadeOut("fast", createCallback(i)); } $("#mycarousel").delay(5000,function() { ReplaceFooterLogos() }); function createCallback(index) { return function(index){ BankArr.push(DisplayArr.shift()); DisplayArr.unshift(BankArr.shift()); $(this).html(DisplayArr[index]).fadeIn(); }; } } 回调,使用其fadeOut参数而不是index。回调将关闭为i创建回调的调用index参数(因此,每个回调都有一个不同的回调),因此它将使用该迭代的值进行回调。循环(createCallback ... 0包含在内)。