2011-10-20 59 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的。你没有清除间隔,所以他们正在复合。