2011-01-12 191 views
0

我想要做的是得到一个记录集的标志,必须数组。 1:用于显示 2:用于银行将值传递给fadeOut回调函数

我将显示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() }); 

ignoe延迟功能 - 我有它!

我的问题是为什么我的变量我是undefined?以及如何将值传递给回调函数?

回答

2

我的问题是为什么我的变量我是不确定的?

我怀疑你会发现它是DisplayArr[i]这是未定义的。当回调运行时i应该是11

当你创建一个封闭(这是你的fadeOut回调是什么),它有一个持久参考一个变量,而不是在那个时间点复制变量的值。所以你所有的回调都会看到相同的i值,这将是循环结束后的值(11)。我猜没有DisplayArr[11]

这里是你如何解决这个问题:(更多关于此封Closures are not complicated):

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 ... 10包括的)。

+0

我已经用footerlogo选择器更改了$(this)。但现在的问题是淡出正在起作用,而淡入淡出不起作用 – 2011-01-12 10:31:03