2013-01-21 9 views
15

Nella mia applicazione Rails, invio una richiesta Ajax quando l'utente preme il pulsante Salva, quando invia la richiesta, posso restituire qualche jQuery.jQuery AddClass quindi rimozione di una classe

Quello che mi piacerebbe fare è aggiungere una classe (salvataggio), avere un ritardo e quindi rimuovere la classe.

Così, ho aggiunto questo:

$('.button').addClass('saving').delay(2000).removeClass('saving'); 

Per qualche ragione, non sta funzionando. Che cosa sto facendo di sbagliato?

risposta

27

.delay() è in realtà per le animazioni.

Usa setTimeout()

$('.button').addClass('saving'); 

setTimeout(function() { 
    $('.button').removeClass('saving'); 
}, 2000); 
+1

Infatti, [setTimeout è la strada da percorrere] (http://jsfiddle.net/QN66w/) –

+0

Ah, non sapevo che '.delay()' era per le animazioni. Funziona, grazie! – user1975031

1

Prova questo forse:

$('.button').addClass('saving').delay(2000, function() { 
    $(this).removeClass('saving') 
}); 
+0

Chiudi! Devi avere '.delay (2000) .queue (function() {});' come nella risposta @ undefined e funzionerà –

9

delay funziona solo con i metodi di animazione legati, è possibile utilizzare il metodo queue:

$('.button').addClass('saving').delay(2000).queue(function(next){ 
    $(this).removeClass('saving'); 
    next(); 
}); 

http://jsfiddle.net/Rp6Xw/44/

+0

Ho provato '.queue()' ma non ha funzionato nella mia applicazione. – user1975031

+0

Sto usando 1.8.3. – user1975031

+0

@ user1975031 Ok, fortunatamente 'setTimeout' funziona per te. Il motivo possibile è che avevo usato 'div' come selettore nel mio codice e basta copiarlo/incollarlo. – undefined

2

Se qualcuno ha bisogno di più di una aggiunta/rimozione della classe, .dequeue(); è anche requisito per funzionare correttamente.

$('.button').addClass('saving').delay(2000).queue(function(){ 
    $(this).removeClass('saving'); 
    $(this).dequeue(); 
}); 
Problemi correlati