jQuery slideUp (). remove () non sembra mostrare l'animazione slideUp prima che si verifichi la rimozione


94

Ho questa linea di JavaScript e il comportamento che vedo è che selectedLiscompare all'istante senza "scivolare verso l'alto". Questo non è il comportamento che mi aspettavo.

Cosa devo fare in modo che le selectedLidiapositive si aprano prima di essere rimosse?

selectedLi.slideUp("normal").remove();

Risposte:


197

Potrebbe essere in grado di risolverlo inserendo la chiamata per rimuovere in un argomento di richiamata a slideUp?

per esempio

selectedLi.slideUp("normal", function() { $(this).remove(); } );

4
Nota che "lenta" e "veloce" sono le uniche velocità. Altre velocità devono essere
espresse

19

Devi essere più esplicito: invece di dire "questo" (che sono d'accordo dovrebbe funzionare), dovresti farlo:

$("#yourdiv").slideUp(1000, function() {
    $(this).remove();
});

2
SCUSA = ho dimenticato di rimuovere il mio id, dovrebbe essere: $ ('# yourdiv'). SlideUp (1000, function () {$ ('# yourdiv'). Remove ();});
Blake

12
L'uso di $ (this) invece di $ ("# yourdiv") è più ottimizzato poiché jQuery non ha bisogno di cercare un nodo.
MaximeBernard

L'utilizzo $("#yourdiv")invece di $(this)è completamente ridondante e non è per questo che questo codice risolve il problema di OP. Questo codice risolve il problema perché utilizza la completerichiamata.
Gavin

8

Il modo più semplice è chiamare la funzione "remove ()" all'interno di slideUp come un parametro come altri hanno detto, come questo esempio:

$("#yourdiv").slideUp("normal", function() {
    $(this).remove();
});

È necessario chiamarlo all'interno della funzione anonima () per evitare che remove () venga eseguito prima che lo slideUp sia terminato. Un altro modo uguale è usare la funzione jQuery "promise ()". Meglio per chi ama il codice autoesplicativo, come me;)

$("#yourdiv").slideUp("normal").promise().done(function() {
    $(this).remove();
});

3

Usando le promesse puoi anche aspettare che più animazioni finiscano, ad esempio:

selectedLi.slideUp({duration: 5000, queue: false})
.fadeOut({duration: 3000, queue: false})
.promise().done(function() {
    selectedLi.remove()
})

-2
selectedLi.slideUp(200, this.remove);

1
Ho provato: non rimuove l'elemento dopo averlo fatto scorrere.
Konstantin Spirin

Nasconde efficacemente l'elemento, ma non lo rimuove effettivamente dal DOM.
andreszs
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.