首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >setTimeout / clearTimeout问题

setTimeout / clearTimeout问题
EN

Stack Overflow用户
提问于 2010-06-10 22:26:50
回答 6查看 222.4K关注 0票数 122

我试着在eg之后做一个页面去到起始页。10秒不活动(用户未在任何地方单击)。其余部分我使用jQuery,但测试函数中的set/clear是纯javascript。

在我的frustation中,我最终得到了类似于这个函数的东西,我希望我可以在页面上的任何点击上调用它。计时器启动正常,但不会在单击时重置。如果函数在前10秒内被调用5次,那么将出现5个警报...没有clearTimeout...

代码语言:javascript
复制
function endAndStartTimer() {
    window.clearTimeout(timer);
    var timer;
    //var millisecBeforeRedirect = 10000; 
    timer = window.setTimeout(function(){alert('Hello!');},10000); 
}

有没有人有几行代码可以解决这个问题?-点击停止,重置并启动计时器。-当计时器到达时,例如。10秒做点什么。

EN

回答 6

Stack Overflow用户

发布于 2010-06-10 22:31:29

问题是timer变量是局部变量,它的值在每次函数调用后都会丢失。

你需要持久化它,你可以将它放在函数之外,或者如果你不想将变量公开为全局变量,你可以将它存储在一个closure中,例如:

代码语言:javascript
复制
var endAndStartTimer = (function () {
  var timer; // variable persisted here
  return function () {
    window.clearTimeout(timer);
    //var millisecBeforeRedirect = 10000; 
    timer = window.setTimeout(function(){alert('Hello!');},10000); 
  };
})();
票数 47
EN

Stack Overflow用户

发布于 2010-06-10 22:30:50

这是因为定时器是函数的局部变量。

尝试在函数外部创建它。

票数 15
EN

Stack Overflow用户

发布于 2017-08-01 05:45:26

在react中使用它的一种方法:

代码语言:javascript
复制
class Timeout extends Component {
  constructor(props){
    super(props)

    this.state = {
      timeout: null
    }

  }

  userTimeout(){
    const { timeout } = this.state;
    clearTimeout(timeout);
    this.setState({
      timeout: setTimeout(() => {this.callAPI()}, 250)
    })

  }
}

例如,如果你想只在用户停止输入之后调用API,这很有帮助。可以通过onKeyUp将userTimeout函数绑定到输入。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3015319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档