PB de clearInterval

Par nicolastaf, il y a 8 ans


Bonjour à tous,

voilà j'ai un PB sur mon code, le principe aprsè avoir fait une sélection avec une API on lance un compte à rebours à échéance j'affiche un message disant délai expiré jusque là ça fonctionne.

Si l'internaute entre temps fait une autre sélection, la sélection est bien pris en compte mais le compte à rebours tourne sur les 2 sélections.

Je n'arrive pas à faire le clearInterval sur le précédent.

function countDown(){ // Set the date we're counting down to var countDownDate = new Date().getTime()+ 120000;//1200000 // Update the count down every 1 second var x = setInterval(function() { // Get todays date and time var now = new Date().getTime(); // Find the distance between now an the count down date var distance = countDownDate - now; // Time calculations for days, hours, minutes and seconds var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60)); var seconds = Math.floor((distance % (1000 * 60)) / 1000); // on lance le chrono dans l'id countDown $("#countDown").text( minutes + " m " + seconds + " s "); $("footer").css({"backgroundColor": "darkseagreen"}); // une fois arrivé à 0 on affiche un message if (distance < 0) { clearInterval(x); // affichage après expiration $("#countDown").text("Votre réservation vient d'expirer..."); $("footer").css({"background-color": "tomato"}); } }, 1000); }

Voici le code de la validation :

var valider = document.getElementById("save"); valider.addEventListener("click", function(){ //storage var sessionStation = { name: station.name, adresse: station.address }; if(sessionStorage.getItem('nameStation')){ //sessionStorage.clear(); clearInterval(x); console.log("OK"); //$("#countDown").text("Votre réservation vient d'expirer..."); //$("#reservation").text(""); } sessionStorage.setItem("nameStation", sessionStation.name); var sessionStation_json = JSON.stringify(sessionStation); // Affichage de la station réservé $("#reservation").text("Vous avez réservé 1 Vélo, station: " + sessionStorage.getItem('nameStation') + " pour"); // on appel la function pour le chrono var x = countDown(); //Après avoir validé on scroll au footer $('html, body').animate({ scrollTop: $("#reservation").offset().top }, 1000); })

merci de votre aide et bonne journée

2 réponses

nicolastaf, il y a 8 ans

PB résolu, pour ceux que ça intéresse il faut modifier la ligne :

function countDown(){ // Set the date we're counting down to var countDownDate = new Date().getTime()+ 120000;//1200000 // Update the count down every 1 second var x = setInterval(function() {

remplacer par

var x; function countDown(){ // Set the date we're counting down to var countDownDate = new Date().getTime()+ 120000;//1200000 // Update the count down every 1 second x = setInterval(function() {
antho07, il y a 8 ans

Bonjour, je vois que tu as résolu le problème tout seul. Effectivement il faut que ton interval soit défini en dehors de de ta fonction.