【问题标题】:How to stop "setInterval" [duplicate]如何停止“setInterval” [重复]
【发布时间】:2010-12-22 07:34:43
【问题描述】:

如何停止和启动setInterval

假设我有一个textarea。我想在焦点上停止 setInterval 并在模糊时重新启动 setInterval(使用 jQuery)。

【问题讨论】:

  • 你有一个例子:[在此处输入链接描述][1] [1]:stackoverflow.com/questions/7483525/…
  • 只需单击鼠标即可接受答案。它也可以帮助其他人在许多答案中看到正确的答案。点击

标签: javascript jquery setinterval


【解决方案1】:

您必须在启动时存储间隔的timer id,稍后您将使用此值来停止它,使用clearInterval 函数:

$(function () {
  var timerId = 0;

  $('textarea').focus(function () {
    timerId = setInterval(function () {
      // interval function body
    }, 1000);
  });

  $('textarea').blur(function () {
    clearInterval(timerId);
  });

});

【讨论】:

  • 我建议在timerId = setInterval 之前添加一个if (timerId)clearInteral(timerId) - 否则,如果调用焦点而不是模糊,则不能保证清除间隔。在测试时,我多次看到这种情况(在 IE10 上)。
  • @PatrickKlug 你的权利!我也需要if (timerId)clearInteral(timerId)
【解决方案2】:

setInterval的返回值存储在一个变量中,稍后用它来清除区间。

var timer = null;
$("textarea").blur(function(){
    timer = window.setInterval(function(){ ... whatever ... }, 2000);
}).focus(function(){
    if(timer){
       window.clearInterval(timer);
       timer = null
    }
});

【讨论】:

    【解决方案3】:

    setInterval 返回一个 id,您可以使用它通过 clearInterval() 取消间隔

    【讨论】:

    • 但是我如何使用 $.live 或 $.listen 来实现这个
    • $.live 目前不支持 focusblur 事件。
    【解决方案4】:

    这是基于 CMS 的回答。问题要求计时器在模糊处重新启动并在焦点处停止,所以我将它移动了一点:

    $(function () {
      var timerId = 0;
    
      $('textarea').focus(function () {
        clearInterval(timerId);
      });
    
      $('textarea').blur(function () {
        timerId = setInterval(function () {
         //some code here 
        }, 1000);
      });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-05
      • 1970-01-01
      相关资源
      最近更新 更多