我正在尝试做的是获取徽标的记录集,必须使用数组。 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未定义?以及如何将值传递给回调?
答案 0 :(得分:2)
我的问题是为什么我的变量i未定义?
我怀疑你会发现它的DisplayArr[i]
未定义。 1}}在回调运行时应为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
包含在内)。