2011-10-20 94 views
1

我試圖檢查我的自調用jquery函數是否完成了工作,但是發生的是結果在每次自我調用時都保持相乘。jquery自我調用函數循環

HTML

<span id="checkit"></span> 

的Javascript

$(function(){ 
    callme(); 
}); 

function callme(){ 
    $('#checkit').append("callme loaded<br />"); 
    setInterval("callme()", 5000); 
} 

通常情況下,這是我的代碼的結果。

onLoad。

callme loaded 

5秒後

callme loaded <from previous 
callme loaded 

另外5秒鐘後

callme loaded <from previous 
callme loaded <from previous 
callme loaded 
callme loaded 
callme loaded 
callme loaded 

對不起,糟糕的解釋。我一直在想這些事情發生的原因。如果任何人都可以解釋我做錯了什麼,或解決這個問題。請幫助 - 這個問題一直困擾着我好幾天。

回答

2

每當您撥打callme時,您正在創建一個新的時間間隔,將再次調用callme。您可以使用clearInterval或使用setTimeout而不是setInterval來清除以前的時間間隔。

function callme(){ 
    $('#checkit').append("callme loaded<br />"); 
    setTimeout(callme, 5000); 
} 
+0

感謝William,我一定會記住setTimeout和setInterval之間的區別。 – datuamizan

+0

沒問題,你應該接受你認爲最好的答案。 – Will

0

您需要檢查是否已創建#checkit元素。而且,你需要使用超時(只調用一次),而不是一個區間(這推移和):

學習
function callme(){ 
    $('#checkit').append("callme loaded<br />"); 
    if (!document.getElementById('checkit')) 
     setTimeout(callme, 5000); 
} 

參考:window.setTimeout

+1

有沒有很好的理由通過callme()而不是'callme'? – fncomp

+0

愚蠢的複製/粘貼錯誤;固定;) –

+0

是的,我後來注意到OP在那裏。 – fncomp

0

的setInterval不setTimeout的。你沒有清除間隔,所以他們正在複合。