2013-03-11 3 views
3

Я хочу иметь обратный отсчет, связанный с определенной кнопкой на моей странице PHP, и я использую следующий код на основе javascript Но он сбрасывает целевое значение на перезагрузке страницы, поэтому, как иметь то же самое без целевое значение получает reset.Can я делаю что-то с сессией ??Обратный отсчет Javascript с PHP

<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 на клиенте. –

+0

Вы не закрываете свой интервал 'countdownTimer'. И никогда не передавайте строку в 'setInterval', но используйте ссылку на функцию (в вашем случае:' setInterval (countDown, 1000) '). –

+0

Мне нужно постоянное хранилище, но как работать с сессиями? – Ankur

ответ

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'.

Если мы хотим поддерживать более старый браузер (cough IE), мы можем использовать userData или просто сделать что-то очень похожее на файлы cookie.

Смежные вопросы