2011-11-18 11 views
6

Tengo un problema con este código, cuando hago clic en el botón de inicio, todo está funcionando como se esperaba, pero cuando quiero detener la animación con clearInterval, no funciona, simplemente sigue dando vueltas ... ¿Qué estoy haciendo mal?clearInterval no funciona?

var a = function() { 
    $("div").animate({height:300},"slow"); 
    $("div").animate({width:300},"slow"); 
    $("div").animate({height:100},"slow"); 
    $("div").animate({width:100},"slow"); 
} 

$(document).ready(function(){ 
    $("start").click(function(){ 

     setInterval(a,1000); 
    }); 

    $("stop").click(function(){ 
     clearInterval(a); 

    }); 

}); 

Respuesta

13

Debe pasar una referencia (que obtiene de setInterval) al método clearInterval para borrarlo. Prueba este

var intervalId; 
var a = function() { 
    $("div").animate({height:300},"slow"); 
    $("div").animate({width:300},"slow"); 
    $("div").animate({height:100},"slow"); 
    $("div").animate({width:100},"slow"); 
} 

$(document).ready(function(){ 
    $("#start").click(function(){ 
     intervalId = setInterval(a,1000); 
    }); 

    $("#stop").click(function(){ 
     clearInterval(intervalId); 
    }); 

}); 
+0

Sólo quería decir Gracias a todos por tales respuesta rápida !!!! –

+0

@Dejo - Me alegro de que lo haya ayudado, asegúrese de marcarlo como una respuesta. – ShankarSangoli

+0

$ ("start") shold be $ ("# start") ... Isnt it ... – Wazzzy

2

La función "setInterval()" rendimientos un valor. Eso es lo que necesita pasar a "clearInterval()", no una referencia al manejador.

1

¿Esto funciona para usted:

 
var chk = setInterval(a,1000); 
then 
clearInterval(chk); 
2

HTML

<div style="height:310px;width:310px;"> 
    <div id="div" style="width:100px;height:100px;background-color:#000"> 
    </div> 
</div> 

<input type="button" id="start" value="start"> 
<input type="button" id="stop" value="stop"> 

JQUERY

var startInterval;

$(document).ready(function(){ 
    var a = function() { 
     $("#div").animate({height:300},"slow"); 
     $("#div").animate({width:300},"slow"); 
     $("#div").animate({height:100},"slow"); 
     $("#div").animate({width:100},"slow"); 
    } 
    $("#start").click(function(){ 
     startInterval=setInterval(a, 2500); 
    }); 

    $("#stop").click(function(){ 
     clearInterval(startInterval); 
    }); 
}); 

Busca en esta referencia jsfiddle

+0

El ejemplo jsfiddle no funciona – Syno

+0

@Syno Actualiza el enlace jsfiddle. También editó la respuesta, por favor verifique. – Wazzzy

+0

Gracias, funciona ahora :) @Wazzzy – Syno