2017-08-25 8 views
2

Ich versuche, einen Timer für ein Projekt zu machen, die Audios aufzeichnen und während ich mache, habe ich mit diesem Problem konfrontiert: setInterval nicht aufhören, warum?Warum clearInterval setInterval nicht stoppt?

Ich habe den folgenden Code:


/** Audio **/ 
var timerseconds = 0; 
$('.audio-recorder-dialog-con').on('click', '#record', function() { 
    gotrecordval = document.getElementById("record").value; 

    //Crónometro 
    var timerseconds = setInterval(function() { 
     rseconds = parseInt(document.getElementById("r-seconds").value); 
     if (rseconds == 59) { 
      document.getElementById("r-seconds").value = "00"; 
     } 
     rseconds = parseInt(document.getElementById("r-seconds").value); 
     rseconds += 1; 
     if (rseconds < 10) { 
      document.getElementById("r-seconds").value = ("00" + rseconds).substr(-2); 
     } 
     if (rseconds >= 10) { 
      document.getElementById("r-seconds").value = rseconds; 
     } 
    }, 1000); 
    // 

    if (gotrecordval == "Empezar a Grabar Audio") { 
     document.getElementById("record").value = "Detener/Subir"; 
    } 

    if (gotrecordval == "Detener/Subir") { 
     document.getElementById("record").value = "Empezar a Grabar Audio"; 
     $('.audio-recorder-dialog-con').fadeOut(500); 
     $(".contenido-dialog-new-d").fadeIn(500); 
     $("#aviaudio").fadeIn(500); 
     clearInterval(timerseconds); 
    } 

}); 

--FIXED--

Ich habe es fixiert diese im Inneren des setInterval durch Zugabe:

//Crónometro 
var timerseconds = setInterval(function(){ 
rseconds = parseInt(document.getElementById("r-seconds").value); 
if(rseconds==59){document.getElementById("r-seconds").value = "00";} 
rseconds = parseInt(document.getElementById("r-seconds").value); 
rseconds+=1; 
if(rseconds<10){document.getElementById("r-seconds").value = ("00" + rseconds).substr(-2);} 
if(rseconds>=10){document.getElementById("r-seconds").value = rseconds;} 

--Code added- 
$('html, body').on('click', '.open-audio', function(){ 
clearInterval(timerseconds); 
}); 
-- 

}, 1000); 

// 

“. open-audio "ist ein Bild, das den Aufzeichnungsdialog für den Benutzer öffnet. Wenn Sie es also erneut öffnen, funktioniert der clearInterval.

+4

Sie scoped 'timerseconds' zum' click' Handler wegen seiner 'var' Erklärung und das 'clearInterval' steht hinter einer Bedingung der' if' Anweisung, also solltest du das überprüfen. Darüber hinaus erleichtert das Einrücken Ihres Codes das Lesen und Debuggen erheblich. – spanky

+0

Wenn das Intervall mit einem Klick gestartet wird und Sie es beim nächsten Klick stoppen möchten, funktioniert es nicht, da Sie gerade 'Zeitüberschreitung' mit einem neuen Intervall überschrieben haben und der Verweis auf das alte Intervall verloren gegangen ist. und jetzt kann es nicht gestoppt werden. – adeneo

Antwort

0

Die Lösung, die Sie zu Ihrer Frage hinzugefügt haben, ist kein Sound: Dadurch wird bei jedem 'Tick' des Timers setInterval ein neuer Event-Handler erstellt. Das ist nicht der richtige Weg.

Stattdessen führen Sie nur setInterval im Fall, dass Sie sie anfangen müssen, so legt es in den ersten if:

if (gotrecordval == "Empezar a Grabar Audio") { 
    //Crónometro 
    var timerseconds = setInterval(function() { 
     rseconds = parseInt(document.getElementById("r-seconds").value); 
     if (rseconds == 59) { 
      document.getElementById("r-seconds").value = "00"; 
     } 
     rseconds = parseInt(document.getElementById("r-seconds").value); 
     rseconds += 1; 
     if (rseconds < 10) { 
      document.getElementById("r-seconds").value = ("00" + rseconds).substr(-2); 
     } 
     if (rseconds >= 10) { 
      document.getElementById("r-seconds").value = rseconds; 
     } 
    }, 1000); 
    // 
    document.getElementById("record").value = "Detener/Subir"; 
} 
Verwandte Themen