2013-03-11 27 views
3

我想在我的PHP頁面上有一個與特定按鈕相關的倒計時,並且我使用的是基於javascript的以下代碼: 但是,它會重置頁面重裝上的目標值,所以如何擁有相同的目標值得到重置。我可以在會話中做些什麼?使用PHP的Javascript倒數

<html> 
    <body> 
<p>Time remaining: <span id="countdownTimer"><span>00:00.<small>00</small></span></p> 
<script type="text/javascript"> 
if (document.getElementById('countdownTimer')) { 
    pad = function(n, len) { // leading 0's 
     var s = n.toString(); 
     return (new Array((len - s.length + 1)).join('0')) + s; 
    }; 

    function countDown() { 
     var now = new Date(); 
     if ((now.getDay() >= 0) && (now.getDay() <= 6)) { // Monday to Friday only 
      var target = 23; // 15:00hrs is the cut-off point 
      if (now.getHours() < target) { // don't do anything if we're past the cut-off point 
       var hrs = (target - 1) - now.getHours(); 
       if (hrs < 0) hrs = 0; 
       var mins = 59 - now.getMinutes(); 
       if (mins < 0) mins = 0; 
       var secs = 59 - now.getSeconds(); 
       if (secs < 0) secs = 0; 
       var str = pad(hrs, 2) + ':' + pad(mins, 2) + '.<small>' + pad(secs, 2) + '</small>'; 
       document.getElementById('countdownTimer').innerHTML = str; 
      } 
     } 
    } 
    var timerRunning = setInterval('countDown()', 1000); 
} 
</script> 
</body> 
</html> 
+0

你要正確地永久存儲或將瞬態行嗎?會話將起作用,就像客戶端上的一個簡單的cookie一樣。 – 2013-03-11 14:54:54

+0

您沒有正確關閉您的'countdownTimer'範圍。永遠不要傳遞一個字符串到'setInterval',而是使用一個函數引用(在你的情況下:'setInterval(countDown,1000)')。 – 2013-03-11 14:56:38

+0

我想持久存儲,但如何解決會議? – Ankur 2013-03-11 15:05:44

回答

0

因此,基本上,你想捕捉'現在'一次,而沒有這種變化,正確嗎?

function getNow(){ //call this rather than use var now = new Date(); 
    if (window.localStorage){ 
     if (!localStorage.now){ 
     localStorage.now = new Date(); 
     } 
     return localStorage.now; 
    }else{ 
    return new Date(); 
    } 
} 

對不起,如果我有一點語法出來的(我不知道,如果你不得不轉換成其存儲在localStorage的日期),但這是它的要點。對於IE7和以下的支持,您需要使用cookie,但概念保持不變。

另外,我覺得你有一個錯誤:

if ((now.getDay() >= 0) && (now.getDay() <= 6)) 

,將永遠是真實的,嘗試:

if ((now.getDay() > 0) && (now.getDay() < 6)) 
1

而不是 '現在' 評估你的變量,例如:

var now = new Date(); 

評估它像這樣(假設我們的瀏覽器支持的localStorage):

if (!localStorage.myDate) 
    localStorage.myDate = (new Date()).toString(); 
var now = new Date(localStorage.myDate); 

這樣,我們永遠只能評價第一次加載當前日期。之後,我們引用該日期的序列化字符串版本,並在創建'now'變量時將其作爲參數傳遞。

如果我們想要支持較老的瀏覽器(咳嗽 IE),我們可以使用userData或簡單地做一些與cookies非常相似的事情。