2016-03-22 14 views
0

wenn Benutzer klicken Element sollte es initiieren das Timeout und setzen Sie die Startzeit auf wahr. Wenn der Benutzer dann erneut auf Element klickt, während der Zeitgeber aktiv ist, sollte er das Zeitlimit löschen und das Zeitlimit erneut initialisieren. Allerdings bekomme ich immer noch die Konsole vom ersten und das folgende Timeout initiiert. Sollte mir die Klarheit nicht mit nur einer verlassen, die letzte erstellt? Ich habe schon das Beispiel aus dieser Frage hier How to reset timeout in Javascript/jQuery? versucht.Reset Timeout Javascript

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); 

Antwort

1

globale Variable definieren, z.B.

var myTimeOut = 0; 

dann in Ihrem Methodenaufruf 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); 
0

Jedes Mal, wenn die Funktion Sie erstellen eine neue Timer-Variable aufgerufen wird, so dass, wenn Sie versuchen, das Timeout zu löschen, wird der Timer var nicht die tatsächliche Timeout Verweis Sie erstellt.

1

wie folgt tun:

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); 
1

Ich denke, dieser Code Ihrer Anforderung genügen sollte.

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); 
    };