2011-01-12 183 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