2010-06-09 71 views
0

這裏是我的問題:問題通過正確的項目到其他函數的setTimeout

var slide; 
$$('#slides li').each(function(i, n) { 
    slide = i; 
    setTimeout("initiateSlide()",n * 500)      
}); 
function initiateSlide(){ 
    i = slide; 
    alert(i); // pretty much alerts the last one 5 times 
} 

我希望initiateSlide() 5頁不同的幻燈片,而不是我只得到了最後一個5倍。

回答

2

您的問題是,在函數運行時,您在initiateSlide()函數中引用的全局變量(幻燈片)被設置爲最後一個變量。您可能想要使用閉包來維護變量的狀態。就像這樣:

$$('#slides li').each(function(i, n) { 
    setTimeout(function() { initiateSlide(i); }, n * 500) 
}); 
function initiateSlide(i){ 
    alert(i); 
} 

注 - 這也消除了對全球完全

+0

+1:謝謝!這解決了我將對象傳遞給setTimeout函數的不同問題:) – Mala 2010-08-10 03:13:56

1

我建議你擺脫全局變量,並通過內環路每張幻燈片作爲參數傳遞給你的initiateSlide功能的需要:

$$('#slides li').each(function(slide, n) { 
    setTimeout(function() { 
    initiateSlide(slide); 
    }, n * 500)      
}); 

function initiateSlide(slide){ 
    alert(slide); 
}​ 

在您的例子中,each循環結束已執行任何setTimeout回調之前,您initiateSlide功能正在使用的最後一個迭代元素調用。