点击javascript

时间:2015-11-27 14:55:57

标签: javascript jquery timer

我的倒计时时间为15秒。它在1秒钟后刷新。当用户点击我网站上的链接时,我还需要刷新计时器。当用户刷新页面时,我使用cookie来不提供计时器刷新。现在,当我点击链接时,我的计时器刷新,但我的旧计时器继续倒计时。结果我有两个计时器,每一秒我看到来自不同计时器的值。例如:我有倒数计时器15秒。当计时器上的值为7秒时,我点击链接,我看到这样的东西:15,6,14,5,13,​​4,12,3等。但我需要正常的序列,如15,14,13等。我应该这样做吗?以下是我的代码:

// calls when I click at link
function rate(auct_id){
$.ajax({
    type: 'POST',
    url: '/auth/rate',
    data: {'id': auct_id },
    success: function(data) {
        data = jQuery.parseJSON(data);
        if (data.message) {
            alert(data.message);
            if (data.message != 'rates_count') {
                windows.location = '/#openModal';
            }
        } else {
            var new_price = data.price;
            var new_login = data.login;
            new_price += '<span> руб.</span>';
            $('#price_' + auct_id).html(new_price);
            $('#login_' + auct_id).html(new_login);
            setTimer(auct_id, true);
        }
    }
});
}

function setTimer(id, update) {
     var countdown4;
     if(getCookie('countdown_' + id) && !update) countdown4 =    getCookie('countdown_' + id); 
     else countdown4 = 15;
     if (update) delete_cookie('countdown_' + id);
     do_cd4(id, countdown4, update);
 }

function getCookie(c_name) { 
var i, x, y, ARRcookies = document.cookie.split(";"); 
for (i = 0; i < ARRcookies.length; i++) { 
    x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("=")); 
    y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1); 
    x = x.replace(/^\s+|\s+$/g, ""); 
    if (x == c_name) { 
        return unescape(y); 
    } 
} 
} 

function setCookie(c_name, value, exdays) { 
   var exdate = new Date(); 
   exdate.setDate(exdate.getDate() + exdays); 
   var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" +         exdate.toUTCString()); 
   document.cookie = c_name + "=" + c_value; 
} 
var delete_cookie = function(name) {
    document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;';
 };

function convert_to_time(secs) { 
   secs = parseInt(secs); 
   hh = secs / 3600;   
   hh = parseInt(hh); 
   mmt = secs - (hh * 3600); 
   mm = mmt / 60; 
   mm = parseInt(mm); 
   ss = mmt - (mm * 60); 

   if (hh > 23) { 
      dd = hh / 24; 
      dd = parseInt(dd); 
      hh = hh - (dd * 24); 
   } else { 
      dd = 0; 
   } 

   if (ss < 10) { 
      ss = "0" + ss; 
   } 
   if (mm < 10) { 
      mm = "0" + mm; 
   } 
   if (hh < 10) { 
      hh = "0" + hh; 
   } 
   if (dd == 0) { 
      return (hh + ":" + mm + ":" + ss); 
   } 
   else { 
      if (dd > 1) { 
         return (dd + " day " + hh + ":" + mm + ":" + ss); 
      } else { 
         return (dd + " day " + hh + ":" + mm + ":" + ss); 
      } 
   } 
} 

// Our function that will do the actual countdown 
do_cd4 = function(id, countdown4, update) { 
   //console.log(countdown4);
   if (countdown4 < 1) {
       countdown4 = 15; 
       do_cd4(id, countdown4); 
   } else {
       $('#timer_' + id).html(convert_to_time(countdown4));
       setTimeout(function() {
          do_cd4(id, countdown4, update);
       }, 1000); 
   } 
   setCookie('countdown_' + id, countdown4, 3); 
   countdown4 = countdown4 - 1; 
 } 

1 个答案:

答案 0 :(得分:0)

问题已经提出:Resetting a setTimeout

您需要在setTimeout上保留一个引用,以便清除它或重新启动它。