221 votes

Réinitialisation d'un setTimeout

J'ai les éléments suivants :

window.setTimeout(function() {
    window.location.href = 'file.php';
}, 115000);

Comment puis-je, via une fonction .click, réinitialiser le compteur à mi-chemin du compte à rebours ?

0 votes

Vous pouvez probablement utiliser une implémentation de débouclage existante.

331voto

bdukes Points 54833

Vous pouvez stocker une référence à ce délai, et ensuite appeler clearTimeout sur cette référence.

// in the example above, assign the result
var timeoutHandle = window.setTimeout(...);

// in your click function, call clearTimeout
window.clearTimeout(timeoutHandle);

// then call setTimeout again to reset the timer
timeoutHandle = window.setTimeout(...);

4 votes

C'est tellement étrange qu'il n'y a pas de .clear() sur l'objet timeout lui-même.

21 votes

@Cort3z c'est parce que window.setTimeout renvoie un nombre (l'ID du timer) et non un "objet timeout".

3 votes

Oui @DanO : étrange que setTimeout ne renvoie pas un objet Timeout. Dans un contexte NodeJS, c'est le cas.

37voto

meder Points 81864

ClearTimeout() et donne la référence du setTimeout, qui sera un nombre. Puis ré-invoquez-la :

var initial;

function invocation() {
    alert('invoked')
    initial = window.setTimeout( 
    function() {
        document.body.style.backgroundColor = 'black'
    }, 5000);
}

invocation();

document.body.onclick = function() {
    alert('stopped')
    clearTimeout( initial )
    // re-invoke invocation()
}

Dans cet exemple, si vous ne cliquez pas sur l'élément body dans les 5 secondes, la couleur de fond sera noire.

Référence :

Remarque : setTimeout et clearTimeout ne sont pas des méthodes natives de l'ECMAScript, mais des méthodes Javascript de l'espace de nom global de la fenêtre.

17voto

Frank Krueger Points 27508

Vous devrez vous souvenir du délai d'attente "Timer", l'annuler, puis le redémarrer :

g_timer = null;

$(document).ready(function() {
    startTimer();
});

function startTimer() {
    g_timer = window.setTimeout(function() {
        window.location.href = 'file.php';
    }, 115000);
}

function onClick() {
    clearTimeout(g_timer);
    startTimer();
}

1 votes

Il est intéressant que cette option ait été ignorée. Les autres semblent toutes nécessiter la duplication de la fonction interne du timer, ce qui est moins que sec et pénible s'il y a plus de quelques lignes de code à maintenir deux fois...

10voto

Deniz Dogan Points 8848
var myTimer = setTimeout(..., 115000);
something.click(function () {
    clearTimeout(myTimer);
    myTimer = setTimeout(..., 115000);
}); 

Quelque chose de ce genre !

1voto

Pour réinitialiser la minuterie, vous devez régler et effacer la variable de la minuterie.

$time_out_handle = 0;
window.clearTimeout($time_out_handle);
$time_out_handle = window.setTimeout( function(){---}, 60000 );

29 votes

Argh, je déconseille l'utilisation de noms de variables de style php en javascript. oui, ça marchera, mais mon Dieu, c'est confus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X