2011-02-13 18 views
8

Quiero crear una página con 2 botones, 'MANTENER' y 'Salir'. Hay un iFrame debajo de los botones. Cuando la página se carga por primera vez, el iFrame comienza a refrescarse automáticamente después de 10 segundos. Cuando el usuario golpea el botón EN CASA, dejará de refrescarse. Después de eso, si presiona el botón LEAVE, el iFrame comenzará nuevamente a refrescarse después de 10 segundos. Estoy usando este código:jQuery - ¿Cómo reiniciar setInterval después de matarlo con clearInterval?

$(document).ready(function() { 
    var refreshIntervalId = setInterval("update()", 10000); 

    $('#leave').click(function() { 
     var refreshIntervalId = setInterval("update()", 10000);; 
    }) 

    $('#stay').click(function() { 
     clearInterval(refreshIntervalId); 
    }) 
}); 

function update(){ 
    var url = "load.php"; 
    $('iframe#ifrm').attr('src', url); 
} 

<div id="bar"> 
    <div class= "button" id="stay"> 
    <a>Stay</a> 
    </div> 
    <div class= "button" id="leave"> 
    <a>Leave</a> 
    </div> 
</div> 

pero no funciona, estoy usando clearInterval en el camino equivocado?

Respuesta

11

Creo que necesita extraer el ID de intervalo establecido fuera del alcance de la función.

var refreshIntervalId; 
$('#leave').click(function() { 
     refreshIntervalId = setInterval(update, 10000); 
     }) 
$('#stay').click(function() { 
      clearInterval(refreshIntervalId); 
     }) 
}); 

Tal vez algunos de validación comprobando en la variable refreshIntervalId también ...

if(refreshIntervalId!=null){ 
    // Do something with the interval id 
} 
+0

what clearInterval exactamente? –

+0

Para el temporizador de intervalo. El 'setInterval' inicia un temporizador de intervalo que llama a la función 'actualizar' cada 10 segundos. La llamada 'clearInterval' detiene ese temporizador. – rcravens

+0

así que si llamamos a clearInterval a 4 segundos, ¿se usarán esos 6 segundos la próxima vez que se vuelva a llamar a la función setInterval? –

1

En primer lugar no se puede definir una variable en la función #leave clic y utilizarlo en la función #stay clic.

utilizar de esta manera:

var refreshIntervalId = null; 

$('#leave').click(function() { 
    refreshIntervalId = setInterval("update()", 10000); 
}) 
$('#stay').click(function() { 
    clearInterval(refreshIntervalId); 
}) 
+2

Lo definió afuera, simplemente no use 'var' dentro de los manejadores de eventos. – JCOC611

1

Es una cuestión de alcance. Eso significa que donde sea que pones la "var" define qué funciones tienen acceso a la variable. Si define la variable fuera de todas las funciones como en el ejemplo de Tricker, cualquier función en su documento tiene acceso a ese valor.

ejemplo de Tricker previamente colocado:

var refreshIntervalId = null; 

$('#leave').click(function() { 
    refreshIntervalId = setInterval("update()", 10000); 
}) 
$('#stay').click(function() { 
    clearInterval(refreshIntervalId); 
}) 

A veces todo el documento no necesitan tener acceso a la variable, por lo que desea ponerlo dentro de una función.

+1

¿Cuál es el punto de agregar la misma respuesta que @Yoram de Langen? –

Cuestiones relacionadas