在这段代码中,ident和data变量在回调中是正确的,但我不知道如何为每次循环迭代传递正确的i。我已经尝试过读取函数并尝试了10件事,但是,我必须寻求堆栈的智慧。
function callback()
{
$(ident).html( data.fields[i].value );
$(ident).fadeTo('slow',1);
}
for(i=0;i<data.fields.length;i++)
{
ident='#'+data.rID+'_'+data.fields[i].field;
$(ident).fadeTo('slow',0,callback);
}
答案 0 :(得分:4)
更改“回拨”功能:
function callback(i) {
return function() {
$(ident).html( data.fields[i].value );
$(ident).fadeTo('slow',1);
};
}
然后在你的循环中:
$(ident).fadeTo('slow',0,callback(i));
这个“回调”实现返回你将传递给“fadeTo()”的函数。
答案 1 :(得分:0)
一种方法是在for
循环中声明回调函数。
答案 2 :(得分:0)
我的原始答案不正确。感谢@Pointy的单挑。
这类似于@Pointy的回答,但关闭的位置不同。
function callback(k) {
$( this ).html( data.fields[k].value );
$( this ).fadeTo('slow',1);
}
for(i=0;i<data.fields.length;i++) {
(function(j) {
ident='#'+data.rID+'_'+data.fields[j].field;
$(ident).fadeTo('slow',0, function() { callback.call( this, j) });
})(i);
}
答案 3 :(得分:-1)
您可以使用匿名函数代替指向callback
的指针,以便将i
传递给callback
。
function callback(i, elem)
{
$(elem).html( data.fields[i].value );
$(elem).fadeTo('slow',1);
}
for(i=0;i<data.fields.length;i++)
{
var ident='#'+data.rID+'_'+data.fields[i].field;
$(ident).fadeTo('slow',0,function() { callback(i, this); });
}
不是使ident
成为全局变量,而是最好声明它(使其约束到当前函数的作用域),然后在回调中使用this
来引用该元素。 / p>
如果你没有在其他任何地方使用 callback
,那么将它的实现放在匿名函数中是有意义的,而不是单独定义它并调用它:
for(i=0;i<data.fields.length;i++) { ident='#'+data.rID+'_'+data.fields[i].field; $(ident).fadeTo('slow',0,function() { $(ident).html( data.fields[i].value ); $(ident).fadeTo('slow',1); }); }
带有内联匿名函数的上述示例不起作用,因为对i
的引用在回调之间共享。