2012-04-25 10 views
29

¿Cómo puedo hacer una función una vez que se ha completado toggleClass? He intentado lo siguiente, pero sin suerte:jquery function on toggleClass complete?

$("#loader").toggleClass('fadeOut', function() { 
    alert('a'); 
}); 
+4

clase de palanca es inmediato y no necesita una llamada de retorno para toggleClass, simplemente coloque 'alert ('a')' en la siguiente línea que alertará después de toggleClass –

+0

estoy tratando de obtener $ ("# loader") para ocultar() después de que se desvaneció, ¿cómo puedo hacer esto? – panthro

+0

Estoy tratando de obtener $ ("# loader") para ocultar() después de que se desvaneció, ¿cómo puedo hacer esto? - – panthro

Respuesta

68

El método jQuery tiene promesa de que devuelve un objeto diferido que se puede acceder utilizando .promise(). Este objeto prometedor se resolverá después de que se completen todas las animaciones en ejecución en los elementos seleccionados. En ese punto, puedes enlazar a su método hecho.

$("#loader").toggleClass('fadeOut',600).promise().done(function(){ 
    alert('a'); 
}); 

http://jsfiddle.net/skram/4x76J/

+1

:) +1 para usar objetos diferidos. –

+13

Esta solución requiere jQuery UI. – Aryo

+0

sin jquery ui no sería una animación, y por lo tanto no tendría una devolución de llamada. ¿tu punto? –

1

toggleClass se ejecuta inmediatamente y por lo que no necesita una llamada de retorno para toggleClass, basta con colocar el alert('a') en la línea siguiente que alertará después de la ejecución toggleClass.

Editar: Parece que quiere jQuery UI Effects - toggleClass que lamentablemente no tiene una función de devolución de llamada.

Probablemente deba escribir su propia función de alternar. Véase más abajo para fadeIn/fadeOut palanca,

var $loader = $("#loader"); 
if ($loader.is(':visible')) { 
    $loader.fadeOut(100, function() { 
     alert('fade out complete'); 
    }); 
} else { 
    $loader.fadeIn(100, function() { 
     alert('fadeIn complete'); 
    }); 
} 
+0

Estoy tratando de obtener $ ("# loader") para ocultar() después de que se desvaneció, ¿cómo puedo hacer esto? - – panthro

+0

@ user1013512 Parece que toggleClass en los efectos de jQuery UI no tiene una devolución de llamada. Mira mi publicación actualizada y avísame si eso te funciona. –

+1

@Vega hace '.toggleClass()' dar un objeto diferido? intente '.toggleClass(). promise(). done (function() {alert (" done ")});' La mayoría de los métodos de animación devuelven un objeto diferido. –

-1
$("#loader").stop().fadeTo(400,0, function() { 
     $(this).toggleClass('fadeOut').hide(); // exec after is faded out. 
     alert(' ta-da!'); 
    }); 
-1

que utiliza otro método para hacer frente a este problema. En este ejemplo he combinado .delay() función y .queue()

$(this).toggleClass("focus_out").delay(500).queue(function(custom_call_back) { 
    $(this).removeClass('focus_out'); 
    custom_call_back(); 
}); 

En su situación $(this) podría ser $('#loader')

jQuery: .delay();queue();