2011-11-30 72 views
2

我试图在不同时间在屏幕上的不同元素上创建一系列点击。我可以很容易地使用setTimeout函数来做到这一点,但我需要使这个无限循环!?jQuery/JS无限定时循环

这是我目前处理代码的一个片段。

setTimeout(function() {jQuery('.CR_1').trigger('click');}, 1000); 
setTimeout(function() {jQuery('.CR_1').trigger('click');}, 5000); 
setTimeout(function() {jQuery('.CR_2').trigger('click');}, 5500); 

关于如何使这项工作的任何想法?

编辑:让我更清楚一点。我试图以相同的顺序反复运行这组函数。 setInterval完美工作。对于任何混乱,我都非常抱歉。

setInterval ("flips()", 12000); 


function flips(){ 
    setTimeout(function() {jQuery('.CR_1').trigger('click');}, 1000); 
    setTimeout(function() {jQuery('.CR_1').trigger('click');}, 5000); 
    setTimeout(function() {jQuery('.CR_2').trigger('click');}, 5500); 

    } 
+0

你也许可以找到答案在这里:http://stackoverflow.com/q/1224463/1031900 –

+0

这不是完全清楚你正在努力去做。我假设你想一次点击一下,其他人则假设你想要独立的定时器遍布整个地方...... :-) –

+0

请注意,你应该将你的代码改为'setInterval(flips,12000) ';没有理由使用字符串表单(它会在代码中创建函数包装)。 – Phrogz

回答

1

我认为你应该使用setInterval代替setTimeout

+0

OP希望每次调用不同的功能和不同的时间间隔。 – Phrogz

3

只需从您的功能中调用setTimeout即可。

setTimeout(callMe, 1000); 

function callMe() { 
    jQuery('.CR_1').trigger('click'); 
    setTimeout(callMe, 1000); 
} 

你也可以使用setInterval,但我更喜欢做这种方式,因为它会被称为从上次运行1000毫秒,不是每个1000毫秒,无论需要多长时间运行(如果该进程是同步的)。

+0

如果您会注意到,各种功能和延迟会有所不同。 – Phrogz

+0

我的例子只是其中的一个项目。他可以填补其余的。 – BNL

1

为什么不使用setInterval呢?

+0

因为OP要每次调用不同的函数和不同的时间间隔。 – Phrogz

+0

似乎setInterval是要走的路,因为它已被接受。 –

+0

@Progro所以只需使用setInterval三次。 – BNL

3
clicky() 

function clicky() { 
    setTimeout(function() {jQuery('.CR_1').trigger('click');}, 1000); 
    setTimeout(function() {jQuery('.CR_1').trigger('click');}, 5000); 
    setTimeout(function() {jQuery('.CR_2').trigger('click');clicky()}, 5500); 
} 
1
var delayedFunctions = [ 
    [1000,function(){ ... }], 
    [5000,function(){ ... }], 
    [5500,function(){ ... }] 
]; 

var fIndex = 0; 
function runDelayedFunctions(){ 
    var details = delayedFunctions[fIndex]; 
    setTimeout(function(){ 
    details[1].call(this); 
    if (++fIndex >= delayedFunctions.length) fIndex=0; 
    runDelayedFunctions(); 
    }, details[0]); 
}; 
runDelayedFunctions(); 
+0

为什么要使事情变得如此复杂? – BNL

+0

@BNL a)这并不复杂,国际海事组织; b)基于我对原始问题的理解(和TJCrowder's),这是正确完成**的简单方法之一。运行_n_并发'setInterval'循环(就像你的答案基本上那样)是脆弱的。例如,如果第一个函数的运行时间比其他函数的运行时间长,那么您的答案将最终中断,并且调用命令将被甩出。 – Phrogz