2011-01-12 4 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 функция задержки - у меня есть!

мой вопрос, почему моя переменная i не определена? и как передать значения для обратного вызова?

ответ

2

мой вопрос, почему моя переменная i не определена?

Я подозреваю, что вы найдете 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

Я изменил $ (this) с помощью селектора footerlogo. но теперь проблема заключается в том, что fadeout работает, и fadein не –

Смежные вопросы