2012-04-05 10 views
0

ich mehrere Timer für meine Web-Seite zu bauen bin versucht, so weit ich habe,JQuery Gebäude mehrere Timer und .each (function() {

$('.timer').each(function() { 
var timer = setInterval(function() { 
    var time = $(this).text().split(':'); 
    var minutes = parseInt(time[0], 10); 
    var seconds = parseInt(time[1], 10); 
    // TIMER RUN OUT 
    if (!minutes && !seconds) { 
     // CLEAR TIMER 
     clearInterval(timer); 
    // MINUS SECONDS 
    } else { 
     seconds -= 1; 
    } 
    // MINUS MINUTES 
    if (seconds < 0 && minutes != 0) { 
     minutes -= 1; 
     seconds = 59; 
    // ADD ZERO IF SECONDS LESS THAN 10 
    } else { 
     if (seconds < 10) { 
      seconds = '0' + seconds; 
     } 
    } 
    // ADD ZERO IF MINUTES LESS THAN 10 
    if (minutes < 10) { 
     minutes = '0' + minutes; 
    } 
}, 1000); 
}); 

Dies gilt nicht, obwohl die Arbeit! Wo ich hing ! falsch

Dank

+0

Was genau funktioniert nicht? –

Antwort

1

Zuerst in Ihrem setInterval Rückruf, this bezieht sich nicht mehr auf das .timer Element. Versuchen Sie, das zu self zu ändern, und fügen Sie var self = this; vor dem Aufruf zu setInterval hinzu. Zweitens schreiben Sie nie Ihre Zeit zurück zu Ihrem .timer Element.

+0

Gute Antwort! Wird jquery darauf achten, das korrekte 'clearInterval' zu löschen, wenn eine Uhr vor der anderen abläuft? – cgwebprojects

+1

'timer' ist in Ordnung, genau wie' self' ist. Der Kontext von 'this' ist das einzige, was sich im Callback ändert. Die 'timer'-Variable selbst ist in einer closure in Ihrem '.each'-Callback enthalten, so dass jedes' .timer'-Element eine eigene Variable erhält. –

0

Versuchen Sie, zu aktualisieren Sie den Text nicht nach allen Berechnungen In diesem Fall Abzählen eine Uhr angezeigt Versuchen Sie:.

$(this).text(minutes+':'+seconds);