限制一次激活一个计时器

时间:2011-07-29 04:55:40

标签: javascript internet-explorer

我们已经使用以下代码启动了计时器。如果另一个计时器在传递给window.setInterval方法的方法上处于活动状态,是否可以使window.setInterval方法失败?

GInterValId = window.setInterval("AutoRefresh()",parseInt(GRefreshInterval));   

2 个答案:

答案 0 :(得分:1)

如果你跟踪window.setInterval()的结果结果,你可以随时停止前一个间隔计时器。

var GInterValId = setInterval(AutoRefresh, parseInt(GRefreshInterval));

然后,当你想重置它时:

if (GInterValId) {
   clearInterval(GInterValId);
}
GInterValId = setInterval(AutoRefresh, parseInt(GRefreshInterval));

另请注意,我没有将字符串传递给setInterval,而是传递实际的JS函数。

或者,如果您只是想阻止设置另一个间隔:

var GInterValId = null;  // initialize

// then, when you want to set it, check to see if it's already been set
if (GInterValId) {
    GInterValId = setInterval(AutoRefresh, parseInt(GRefreshInterval));
}

答案 1 :(得分:1)

你要做的是为此建立一个系统。创建一个处理所有计时器的对象:

var Timer = function () {
   var currentTimer;

   this.setTimer = function (func,time) {
      if (currentTimer) {
           alert("one timer already set");
      }else {
          currentTimer = setInterval(func,time);
      }
   }

   this.stopTimer = function () {
      clearInterval(currentTimer);
      currentTimer = null;
   }
}

现在您可以使用此代码:

function doSomething() {...}      // function example
function doSomethingElse() {...}  // function example

var MyTimer = new Timer();

MyTimer.setTimer(doSomething,1000); // this will run

MyTimer.setTimer(doSomethingElse,1000); // this will not run

第二个不会运行,因为另一个是活动的。 为了使它工作,你已经清楚了第一个。

MyTimer.stopTimer(); // will clear the current timer then you can run another one
MyTimer.setTimer(doSomethingElse,1000); // will run perfectly