所以,我有这个简单的代码
$('#info_name'+index).show("slide", {direction: "right"}, 1000, function(){
$('#info_info'+index).show('slide',{direction: "up"}, 1000);
});
被i
声明为上层只是一个变量var i=0
,但在回调中,函数我看不到它......
所以,我有这个简单的代码
$('#info_name'+index).show("slide", {direction: "right"}, 1000, function(){
$('#info_info'+index).show('slide',{direction: "up"}, 1000);
});
被i
声明为上层只是一个变量var i=0
,但在回调中,函数我看不到它......
我不确定这是否会满足您的要求,即使i
可用 - 如果您希望回调函数影响事件处理程序附加到的元素,请使用$(this)
:
$('#info_name'+i).show("slide", {direction: "right"}, 1000, function(){
$(this).show('slide',{direction: "up"}, 1000)
});
存在范围问题i
。由于i
在外部范围内声明,所有回调将引用相同的i
,这意味着,如果i
更改,所有回调的引用i
也将更改。
您可以做的是创建一个函数来生成回调,因为在这种情况下会创建一个新范围,因此i
将保留 的值。
基于原始问题,我稍微简化了代码。您已经对其进行了编辑,但我再也找不到回调了……但希望这可能对您有所帮助
var getCallback = function(index) {
return function(){
// You can see how this index is being captured correctly in Javascript console
console.log(index);
$('#name' + index).show('slide',{direction: "up"}, 1000)
};
};
for (var i = 0; i < 3; ++i) {
$('#name'+i).show("slide", {direction: "right"}, 1000, getCallback(i));
}
JSFiddle: http: //jsfiddle.net/vd9Mj/ </p>
更新:
你的回调在哪里...?看来您已将其从问题中删除。
var i=-1;
var doStuff = function(index) {
$('.third').append('<div class="showinfo"><h3 id="info_name'+i+'" class="info_name">'+contact_name[index]+'</h3><span class="info_info" id="info_info'+index+'"><strong>'+contact_information[0][0]+'</strong>: '+contact_number[index]+'</span></div>');
$('#info_name'+index).show("slide", {direction: "right"}, 1000);
$('#info_info'+index).delay(1000).show('slide',{direction: "up"}, 1000, function() {
// Insert code for callback.
});
};
$.each(contact_status, function(key, value){
i++;
if(value == info_id){
doStuff(i);
}
});