jQuery无限的函数执行

我们想知道是否可以使用jQuery来检查多个元素,并且根据通过一次单击分配给它们的类型,执行其他function。 基本上,一个function将永远运行,而用户不刷新页面。

这个想法不是依赖于事件点击来执行一个函数,而是依赖于分配给特定元素的类。

例如:

$("td.gantt").each(function() { if($(this).hasClass("oper")) { //execute a serie of functions } if($(this).hasClass("preop")) { //execute a serie of functions } }); 

以上执行一次,我们需要一直运行。

 // define a function... function ganttEach() { $("td.gantt").each(function() { // ... }); } // ...repeat it once every second window.setInterval(ganttEach, 1000); 

你不能“让它一直运行”(比如,在一段while(true)循环中)因为JavaScript是单线程的并且阻塞线程意味着你的其他代码永远不会运行。 setInterval()确保其他代码有必要的“间隙”来执行。

setInterval()返回一个可以存储在变量中的ID,并在某个时刻输入clearInterval()以使其再次停止。


如果要确保函数的每个新迭代仅在前一个迭代完成后才开始,请使用setTimeout()代替:

 // define a self-repeating function... function ganttEach() { $("td.gantt").each(function() { // ... }); window.setTimeout(ganttEach, 1000); // calls itself again in one second } // ...initiate self-repeating function ganttEach(); 

你可能应该包括一些方法来阻止无休止的重复,比如引入一个在setTimeout()调用之前检查过的标志。

您可以使用setInterval每隔几毫秒(例如50毫秒)运行检查

 window.setInterval (function () { // do checks here }, 50); 

如果您的检查太频繁或太复杂,您最终可能会使用大量的CPU电源。

有可能,使用setInterval 。 我的建议是选择重复函数之外的元素,以便最小化开销

无限循环会锁定浏览器UI ,因为它是单线程环境。 设置间隔,但是允许您向UI堆栈添加操作,该操作将在给定的时间段后执行。 您可以在setInterval第二个参数中指定setInterval

 // select the element outside // to minimize overhead $gantt = $("td.gantt"); // define a repeating action setInterval(function() { $gantt.each(function() { if($(this).hasClass("oper")) { //execute a serie of functions } if($(this).hasClass("preop")) { //execute a serie of functions } }); }, 100); // repeat interval: 100ms 

我不确定你要做什么,但你尝试过setInterval吗? 如果这是你真正想要的,它将继续运行。