2012-04-05 15 views
1

所以,我有這個簡單的代碼一定的參考價值回調函數

$('#info_name'+index).show("slide", {direction: "right"}, 1000, function(){ 
    $('#info_info'+index).show('slide',{direction: "up"}, 1000); 
}); 

i是上宣佈只是一個變量var i=0,但在回調函數我還看不出來......

+1

如果您發佈了更大的代碼段,它可能會有幫助。 – 2012-04-05 15:13:11

+0

顯示您的完整代碼。你已經聲明瞭我的位置,並且發佈了一段以「info_name」開頭的id。 – DG3 2012-04-05 15:13:45

+0

如果你在上面的函數中包含'var i = 0;',那麼'i'在回調。 – 2012-04-05 15:15:47

回答

2

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/

UPDATE:

哪裏是你的回調。 ..?看來你已經從問題中刪除了它。

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); 
    } 
}); 
​ 
3

我不知道這會做你想要什麼,即使i是可利用的 - 如果你希望你的回調函數來影響事件處理程序連接到元素,使用$(this)

$('#info_name'+i).show("slide", {direction: "right"}, 1000, function(){ 
     $(this).show('slide',{direction: "up"}, 1000) 
}); 
+0

不,我需要使用我的變量,因爲它有當前元素ID號。它會出現在其他地方,不同的元素。 – NoNameZ 2012-04-05 15:18:06