【问题标题】:Calling setInterval() from setTimeout() does not start timer从 setTimeout() 调用 setInterval() 不会启动计时器
【发布时间】:2018-05-03 22:47:55
【问题描述】:

我的任务是在预定义的时间后调出引导模式窗口,为此我使用 setTimeout()。然后另一个任务是在模​​式窗口的主体中显示倒计时 - 但是从 setTimeout() 函数调用 setInterval() 不会做任何事情。

func = function(warntime) {
   func.tid = setInterval(function() {
     $("#dialog-countdown").html(warntime--);
       if(warntime == 0) {
           doSignout();
       }
   }, 1000);
};

var tmwarn = setTimeout(function(){
         $("#timeout-modal").modal("show");
         func(60);
   }, 20000);

所以 func() 调用不会启动计时器,至少在 Chrome、Safari 或 IE 中不会。

怎么了?有什么解决方法吗?

【问题讨论】:

  • 你真的在任何地方调用函数吗?
  • 您确定间隔开始了吗?那个警告时间是你所期望的吗?等等。没有什么能在我身上跳出来。
  • 这里没有足够的信息,用提供的必要值去除最小代码以重现问题。

标签: javascript settimeout setinterval


【解决方案1】:

如果我理解正确,你想要这样的东西:

func = function(warntime) {
   func.tid = setInterval(function() {
     warntime--;
     console.log('warntime: ', warntime);
       if(warntime == 0) {
           doSignout(func.tid);
       }
   }, 2000);
};

doSignout = function(id) {
   console.log('signing out');
   clearInterval(id) 
}

setTimeout(function(){
    func((sessionTimeout - sessionTimeoutWarning)/1000);
}, sessionTimeoutWarning);

here's the working fiddle

【讨论】:

  • 谢谢!为我工作。仍然不知道为什么我自己的代码不起作用,它看起来几乎一样。关于如何在用户输入上重新启动“警告时间”计数器的任何提示?
  • 您的代码不起作用,因为您没有使用间隔 ID 调用 clearInterval()。
  • 关于重置超时 - 不确定您要达到的目标。小提琴中warntime是一个全局变量,你不能只监视用户输入中的on click事件以及输入值并重置warntime吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 2011-12-24
相关资源
最近更新 更多