0

i have this JSFiddle that has the script to do the multiple timers, but only the last one works, i'd searched a lot about this, and didn't find an answer.

I suppose that the problem is in the array of timers, but not sure, can you help?

jQuery.fn.countdown = function (yr, mes, d, h, m, s) {
    $that = $(this);
var delta = 0;

var start = function (yr, mes, d, h, m, s) {
    theyear = yr;
    themonth = mes;
    theday = d;
    thehour = h;
    theminutes = m;
    theseconds = s;

    var today = new Date();
    var todayy = today.getYear();
    if (todayy < 1000) todayy += 1900;
    var todaym = today.getMonth();
    var todayd = today.getDate();
    var todayh = today.getHours();
    var todaymin = today.getMinutes();
    var todaysec = today.getSeconds();

    var todaystring = montharray[todaym] + " " + todayd + ", " + todayy + " " + todayh + ":" + todaymin + ":" + todaysec;

    var futurestring = montharray[mes - 1] + " " + d + ", " + yr + " " + thehour + ":" + theminutes + ":" + theseconds;

    dd = Date.parse(futurestring) - Date.parse(todaystring) + delta;

    dday = Math.floor(dd / (60 * 60 * 1000 * 24) * 1);
    dhour = Math.floor((dd % (60 * 60 * 1000 * 24)) / (60 * 60 * 1000) * 1);
    dmin = Math.floor(((dd % (60 * 60 * 1000 * 24)) % (60 * 60 * 1000)) / (60 * 1000) * 1);
    dsec = Math.floor((((dd % (60 * 60 * 1000 * 24)) % (60 * 60 * 1000)) % (60 * 1000)) / 1000 * 1);

    if (dday < 0 && dhour < 0 && dmin < 0 && dsec < 1) {
        alert("ended");
        return;
    } else {
        $that.html("<span><strong>" + dday + "</strong><span> Days | " + "<span><strong>" + dhour + "</strong></span> Hours | " + "<span><strong>" + dmin + "</strong></span> Minutes");
    }

    setTimeout(function () {
        start(theyear, themonth, theday, thehour, theminutes, theseconds);
    }, 1000);
}
return {
    start: function () {
        start(yr, mes, d, h, m, s);
    },
    addTime: function (ms) {
        delta += ms;
    }
}

};

this is what makes the countdown. check the rest in jsfiddle

Severiano
  • 1,083
  • 3
  • 25
  • 54

1 Answers1

1

The problem is that you are ommiting var keyword when declaring variables, thus they are declared as global and shared between timers. This should work (jsfiddle):

var $that = $(this);

...

var theyear = yr;
var themonth = mes;
var theday = d;
var thehour = h;
var theminutes = m;
var theseconds = s;

...

var dd = Date.parse(futurestring) - Date.parse(todaystring) + delta;

var dday = Math.floor(dd / (60 * 60 * 1000 * 24) * 1);
var dhour = Math.floor((dd % (60 * 60 * 1000 * 24)) / (60 * 60 * 1000) * 1);
var dmin = Math.floor(((dd % (60 * 60 * 1000 * 24)) % (60 * 60 * 1000)) / (60 * 1000) * 1);
var dsec = Math.floor((((dd % (60 * 60 * 1000 * 24)) % (60 * 60 * 1000)) % (60 * 1000)) / 1000 * 1);
Community
  • 1
  • 1
polybios
  • 1,159
  • 8
  • 20