2012-04-25 15 views
29

Come posso eseguire una funzione una volta completato un toggleClass? Ho provato quanto segue ma senza fortuna:funzione jquery su toggleClass completata?

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

classe toggle è immediato e non hai bisogno di un callback per toggleClass, basta posizionare l'avviso ('a') 'nella riga successiva che avviserà dopo toggleClass –

+0

im cercando di ottenere $ (" # loader ") per nascondere() dopo la sua dissolvenza, come posso fare questo? – panthro

+0

sto cercando di ottenere $ ("# loader") per nascondere() dopo la sua dissolvenza, come posso fare questo? - – panthro

risposta

68

Il jQuery ha metodo di promessa che restituisce un oggetto differita che è possibile accedere utilizzando .promise(). Questo oggetto promessa verrà risolto dopo che tutte le animazioni in esecuzione sugli elementi selezionati sono state completate. A quel punto, puoi legare al metodo fatto.

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

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

+1

:) +1 per l'utilizzo dell'oggetto posticipato. –

+13

Questa soluzione richiede l'interfaccia utente jQuery. – Aryo

+0

senza jquery ui non sarebbe un'animazione, e quindi non avrebbe una richiamata. il tuo punto? –

1

toggleClass viene eseguito immediatamente e in modo da non avere bisogno di un callback per toggleClass, è sufficiente posizionare il alert('a') nella riga successiva che si avverte dopo toggleClass viene eseguito.

Edit: Sembra che si desidera jQuery UI Effetti - toggleClass che purtroppo non dispone di una funzione di callback.

Probabilmente dovresti scrivere la tua funzione di commutazione. Vedi sotto per fadeIn/fadeOut ginocchiera,

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

sto cercando di ottenere $ ("# loader") per nascondere() dopo la sua dissolvenza, come posso fare questo? - – panthro

+0

@ user1013512 Sembra che toggleClass in effetti dell'interfaccia utente jQuery non abbia una richiamata .. Controlla il mio post aggiornato e fammi sapere se questo funziona per te. –

+1

@Vega fa '.toggleClass()' fornisce un oggetto posticipato? prova '.toggleClass(). promise(). done (function() {alert (" done ")});' La maggior parte dei metodi di animazione, se non tutti, restituiscono un oggetto posticipato. –

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

ho usato un altro metodo per affrontare questo problema. In questo esempio ho combinato .delay() funzione e .queue()

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

Nella tua situazione $(this) potrebbe essere $('#loader')

jQuery: .delay();queue();