2009-09-24 17 views
102

Tengo el siguiente:Restablecimiento de un setTimeout

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

¿Cómo puedo, a través de una función .click, restablecer el contador a medio camino a través de la cuenta regresiva?

+0

Probablemente se puede utilizar una implementación de supresión de rebotes existente. – zehelvion

Respuesta

182

Puede almacenar una referencia a ese tiempo de espera, y luego llamar al clearTimeout en esa referencia.

// 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(...); 
+1

Tan extraño que no hay un '.clear()' en el objeto de tiempo de espera en sí. – Automatico

+9

@ Cort3z eso es porque 'window.setTimeout' devuelve un número (el ID del temporizador) y no un" objeto de tiempo de espera ". –

+0

¡Eres un salvavidas! ¡¡¡Muchas gracias!!! – wdanda

17

clearTimeout() y alimenta la referencia de setTimeout, que será un número. A continuación, volver a invocarlo:

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() 
} 

En este ejemplo, si no hace clic en el elemento del cuerpo en 5 segundos, el color de fondo será de color negro.

Referencia:

Nota: setTimeout y clearTimeout no son métodos nativos de ECMAScript, pero los métodos de JavaScript del espacio de nombres de ventana global.

4
var myTimer = setTimeout(..., 115000); 
something.click(function() { 
    clearTimeout(myTimer); 
    myTimer = setTimeout(..., 115000); 
}); 

¡Algo en esa línea!

4

Usted tendrá que recordar el tiempo de espera "temporizador", cancelarla, a continuación, reiniciarlo:

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(); 
} 
+0

Interesante que esta opción ha sido ignorada. Todos los demás parecen requerir la duplicación de la función interna del temporizador, que es menos que seco y doloroso si hay más de unas pocas líneas de código para mantener dos veces ... – brianlmerritt

1
$(function() { 

    (function(){ 

     var pthis = this; 
     this.mseg = 115000; 
     this.href = 'file.php' 

     this.setTimer = function() { 
      return (window.setTimeout(function() {window.location.href = this.href;}, this.mseg)); 
     }; 
     this.timer = pthis.setTimer(); 

     this.clear = function(ref) { clearTimeout(ref.timer); ref.setTimer(); }; 
     $(window.document).click(function(){pthis.clear.apply(pthis, [pthis])}); 

    })(); 

}); 
2

Este temporizador se disparará un "Hola" Alertbox después de 30 segundos. Sin embargo, cada vez que haga clic en el botón Restablecer temporizador, borrará el temporizadorHandle y luego volverá a establecerlo. Una vez que se dispara, el juego termina.

<script type="text/javascript"> 
    var timerHandle = setTimeout("alert('Hello')",3000); 
    function resetTimer() { 
     window.clearTimeout(timerHandle); 
     timerHandle = setTimeout("alert('Hello')",3000); 
    } 
</script> 

<body> 
    <button onclick="resetTimer()">Reset Timer</button> 
</body> 
2

Para restablecer el temporizador, lo que se necesita para establecer y limpiar el temporizador variable de

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

Argh, desaconsejo usar nombres de variables de estilo php en javascript . sí, funcionará, pero Dios mío, es confuso. – psynnott