重置超时javascript

时间:2016-03-22 11:22:01

标签: javascript jquery time vue.js

当用户单击元素时,它应该启动超时并将starttime设置为true。然后,如果用户在计时器处于活动状态时再次单击元素,则应清除超时并重新启动超时。但是我仍然从第一个和下一个超时启动控制台。如果cleartimeout只留下一个,最后一个创建?我已经在这里How to reset timeout in Javascript/jQuery?尝试了这个问题的例子。

    toggleCard: function(card){
                var Timer = null;
                if(this.startTime){
                    console.log('already activated');
                    window.clearTimeout(Timer);
                    this.startTime = false;
                }

                this.startTime = true;
                var Timer = setTimeout(function(){
//                        this.taskCard = false;
//                        this.classCard = true;
                    console.log('old timer')
                }.bind(this), 5000);

4 个答案:

答案 0 :(得分:1)

定义全局变量,例如

var myTimeOut = 0;

然后在方法调用clearTimeout

toggleCard: function(card){
                clearTimeout(myTimeOut);
                this.startTime = true;
                myTimeOut = setTimeout(function(){
//                        this.taskCard = false;
//                        this.classCard = true;
                    console.log('old timer')
                }.bind(this), 5000);

答案 1 :(得分:1)

这样做:

toggleCard: function(card) {
    window.Timer = null; // <-----------declare timer globally here
    if (this.startTime) {
      console.log('already activated');
      window.clearTimeout(Timer); // <------- clear here if it is.
      this.startTime = false;
    }

    Timer = setTimeout(function() { // <-------assign the setTimeout here
      this.startTime = true; // <---------It has to be here.
      //   this.taskCard = false;
      //   this.classCard = true;
      console.log('old timer')
    }.bind(this), 5000);

答案 2 :(得分:1)

我认为此代码应符合您的要求。

 var timer = null;
    var started = false;
    toggleCard = function (card) {
        if (started) {
            console.log('Timer already active');
            window.clearTimeout(timer);
        } else {
            console.log('Timer active now');
            started = true;
        }

        timer = setTimeout(function () {
            console.log('Timer elapsed! ');
            started = false;
        }.bind(this), 2000);
    };

答案 3 :(得分:0)

每次调用该函数时都会创建一个新的Timer变量,因此当您尝试清除超时时,Timer var不会引用您创建的实际超时。