2012-11-03 63 views
-1

在這裏,我附上我的代碼。當對話框打開時清除超時功能,但它不能正常工作。當我打開對話框時,倒數從20減少到20秒,如果我關閉並打開對話框,則時間會互相摺疊。clearTimeout功能在打開對話框時無法正常工作

function(){ 
    var time =20; 
    flag = false;  
    clearTimeout(startTimer);  
    startTimer = function(){    
     if(!flag){    
      var finTime = time - 1; 
      time = finTime;    
      setTimeout(startTimer,1000);     
      if(time==0){      
       flag = true;  }    
      $("#input").text(time);    
     } else {     
      clearTimeout(startTimer,1000);       
     } 
    }; 

    setTimeout(startTimer,1000); 

}; 

我已經試過這個代碼也

dialogOpen = function(){ 

    $("#dialog").dialog('open'); 

    startTimer(); 
    stopTimer(); 
} 

startTimer = function() { 

    time = 20;  
    flag = false;  
    setTimeout(startTime, 1000); 
}; 

stopTimer = function() { 

    flag = true;   
    time = 0;  
    clearTimeout(startTime); 
}; 

startTime = function(){ 

    if(!flag){ 

     var finTime = time - 1; 

     time = finTime;   

     setTimeout(startTime,1000); 

     if(time==0){     
      flag = true; 
     } 
     $("#input").text(time);   
    } else {    
     clearTimeout(Time);       
    } 
}; 
+0

當我一次又一次打開我的對話框時,它並沒有清除以前的時間 – user2587222

+0

'clearTimeout()'不會將函數作爲參數,它需要由'setTimeout()'返回的超時ID。你看過任何['clearTimeout()'文檔](https://developer.mozilla.org/en-US/docs/DOM/window.clearTimeout)嗎? – nnnnnn

回答

1

您必須分配setTimeout一個變量

var timer;  
timer = setTimeout(startTimer,1000); 

,你可以通過傳遞變量清除setTimeout使用clearTimeout

clearTimeout(timer); 
+0

雅我也試過。我將該變量設置爲global.Is任何錯誤將var設置爲全局 – user2587222

+0

我沒有看到您在您提供的代碼中設置了全局變量。 –

+0

Sry,我在這裏提到了我的prog.Didnt。但是有一個名爲startTimer的全局變量在那裏。 – user2587222

1

要調用clearTimeout()要在intervalVariable傳遞,是由setTimeout(),而不是函數返回的,所以它看起來像:

var intervalVariable = setTimeout(startTimer,1000); 
clearTimeout(intervalVariable); 

這是最好的ID爲intervalVariable事瀏覽器用來取消它的超時。

在您的startTimer函數之前設置一個全局變量,然後將其設置爲返回setTimeout()並用它代替clearTimeout()中的startTimer

+0

謝謝。它的工作很好.... – user2587222