2011-12-18 133 views
2

我试图使用jQuery的setTimeout的,以调用一个方法每个x时间间隔:的setTimeout功能不能正常工作

$('.text').blur(function() { 
    doSmth(); 
}); 

$('.text').bind("paste", function (e) { 
    setTimeout(function() { 
     doSmth(); 
    }, 5); 
}); 

超时不工作,请指教!

+1

''setTimeout'只在给定的延迟后调用提供的函数*一次*在这里解释:https://developer.mozilla.org/en/DOM/window.setTimeout并且已经说过,'setTimeout '与jQuery无关。 – 2011-12-18 13:32:40

+1

这就是_Javascript_ – SLaks 2011-12-18 13:33:48

回答

2

你是什么意思与“它不工作”?无论如何setTimeout()是一个JavaScript函数,只在指定的时间间隔后触发一次。

如果你wan't触发东西每五秒钟你应该做的:

var interval = setInterval(doSmth, 5000); 

哪里doSmth是其他地方5000定义的函数是间隔的毫秒数。如果哟想停止执行的只是做:

clearInterval(interval); 
+0

从我读过的内容来看,避免setInterval通常是一个好主意,因为您可以结束堆栈调用。我添加了一个答案,它使用setTimeout来调用一个函数,然后在函数结束时设置一个新的超时,在五秒内再次调用自己。这样,你不能结束一堆电话。 – 2011-12-18 13:46:45

+0

它的工作原理:)...谢谢 – Echo 2011-12-18 17:44:48

1

首先,它不是“jQuery setTimeout”setTimeout是本地API的一部分,而不是jQuery的API。

二,我假设你想要5秒。目前您正在做5毫秒

$('.text').bind("paste", function(e) { 
    setTimeout(function() { 
     doSmth(); 
    }, 5000); 
}); 

代码中5的持续时间太短而无法察觉。

+1

setTimeout只执行一次,你应该使用setInterval – 2011-12-18 13:35:30

+0

@NicolaPeluchetti:是的,我解释*“每x时间间隔”*意思是每次发生事件时x的时间间隔。这并不完全清楚是什么意思。 – RightSaidFred 2011-12-18 13:38:01

0

我看到其他用户的答案setInterval的,但是从我读过,你应该避免使用setInterval的,因为你可以用的不是堆叠结束 - 可是执行的函数调用等

所以,你能做些什么,而不是是这样的:

var myTimeout; 
$('.text').bind("paste", function (e) { 
    function loopFunction() { 
     doSmth(); 
     myTimeout = setTimeout(loopFunction, 5000); 
    } 
    myTimeout = setTimeout(loopFunction, 5000); 
}); 

现在你有一个自称每五秒钟的功能。

+0

我已经更新了我的代码根据你的方法仍然不会自己调用! :$('。sequenceStringArea')。blur(function(){ findMatchedGeneticFeature(); }); var myTimeout; $('。sequenceStringArea')。绑定( “粘贴”,函数(E){ 函数loopFunction(){ findMatchedGeneticFeature(); myTimeout = setTimeout的(loopFunction,1000); } myTimeout = setTimeout的(loopFunction,1000); }); – Echo 2011-12-18 17:29:00

0

根据您的反馈,这里是解决方案:

var interval = setInterval(doSmth, 5000); 


    $('.text').blur(function() { 
     doSmth(); 
    }); 

    $('.text').bind("paste", function(e) { 
     setTimeout(function() { 
      doSmth(); 
     }, 0); 
    }); 

感谢您的支持惊人。