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吗? 如果这是你真正想要的,它将继续运行。