2013-11-01 20 views
0

很久以前,當我第一次開始建設我的頁面(系統監控),我說:jQuery的 - 與一些更靈活的替代基本的setTimeout

<script language="javascript" type="text/javascript">setTimeout("location.reload();",60000);</script> 

使頁面重新加載每60秒。

到目前爲止它的工作非常順利。但是[頁面]隨着更多的PHP和更多的JQuery的使用而增長)。

我現在正在尋找一種方法來暫停setTimeout /然後在稍後恢復。

我有一些jQuery,當一個元素被右鍵點擊時,它會加載一些數據,並顯示一個帶有該結果的小表。但是我希望它能夠在顯示該表時不會刷新頁面。當頁面再次被隱藏時,setTimeout繼續。

這樣做的最好方法是什麼? (n.b. 60000目前是通過配置變量在PHP中設置的)。

+7

看起來像一個可怕的設計,但我猜想這只是供自己使用。要停止超時,只需使用clearTimeout清除它,然後每當重新啓動它。作爲旁註,有一個metatag(meta刷新)可以完成同樣可怕的事情。 – adeneo

+0

這個答案看起來像你正在尋找什麼:http://stackoverflow.com/a/3969760/191226 –

+0

重複的[javascript:pause setTimeout();](http://stackoverflow.com/questions/3969475/javascript-pause-settimeout) – CodingIntrigue

回答

1

不應該使用字符串來調用setTimeout中的函數 - 這與使用eval()一樣糟糕。相反,你可以這樣做:

var 
timeout = null, 
start = function() { 
    timeout = setTimeout(function() { location.reload(); }, 60000); 
}, 
stop = function() { 
    if (timeout) clearTimeout(timeout); 
}; 

start(); 

// and, on button click, call: 
stop(); 
+1

乾杯,這實際上比我試圖做的更簡單。 – IGGt

1

編輯

好吧,我做了我在這裏做愚蠢的事了一些更新,現在它的工作。 我也加入了CONSOLE.LOG調試運行,所以你可以看到時間,你與這個職位浪費:]

var pageReloader = function() { 

    var timeout = null, 
     startTime = 0, 
     remainingTime = 0, 
     delay = 60; 

    return { 
     start: function() { 
      startTime = (new Date()).getTime(); 
      remainingTime = delay * 1000; 
      timeout = setTimeout(function() { 
       location.reload(); 
      }, delay * 1000); 

     }, 

     stop: function() { 
      if (timeout) clearTimeout(timeout); 
     }, 

     pause: function() { 
      if (timeout) { 
       clearTimeout(timeout); 
       remainingTime = (remainingTime) - ((new Date()).getTime() - startTime); 
       console.log(remainingTime); // DEBUG 
      } 
     }, 

     unpause: function() { 
      if (timeout) { 
       startTime = (new Date()).getTime(); 
       timeout = setTimeout(function() { 
        location.reload(); 
       }, remainingTime); 
      } 
     } 
    }; 

}(); 

pageReloader.start(); 
pageReloader.pause(); 
pageReloader.unpause();