jQuery slideUp (). remove () no parece mostrar la animación de slideUp antes de que ocurra la eliminación

94

Tengo esta línea de JavaScript y el comportamiento que veo es que el selectedLi desaparece instantáneamente sin "deslizarse". Este no es el comportamiento que esperaba.

¿Qué debo hacer para que se selectedLideslice hacia arriba antes de retirarlo?

selectedLi.slideUp("normal").remove();
Eric Schoonover
fuente

Respuestas:

197

¿Podría solucionarlo poniendo la llamada a eliminar en un argumento de devolución de llamada para slideUp?

p.ej

selectedLi.slideUp("normal", function() { $(this).remove(); } );
seanb
fuente
4
Tenga en cuenta que "lento" y "rápido" son las únicas velocidades. Otras velocidades deben estar en milisegundos o se establecerán de forma predeterminada en 400. keyframesandcode.com/resources/javascript/deconstructed/jquery/…
bendman
19

Debe ser más explícito: en lugar de decir "esto" (que estoy de acuerdo que debería funcionar), debe hacer esto:

$("#yourdiv").slideUp(1000, function() {
    $(this).remove();
});
Blake
fuente
2
LO SENTIMOS = Olvidé eliminar mi identificación, debería ser: $ ('# yourdiv'). SlideUp (1000, function () {$ ('# yourdiv'). Remove ();});
Blake
12
Usar $ (this) en lugar de $ ("# yourdiv") está más optimizado ya que jQuery no necesita buscar un nodo.
MaximeBernard
Usar en $("#yourdiv")lugar de $(this)es completamente redundante y no es por eso que este código soluciona el problema de OP. Este código soluciona el problema porque usa la completedevolución de llamada.
Gavin
8

La forma más sencilla es llamar a la función "remove ()" dentro de slideUp como un parámetro como otros han dicho, como este ejemplo:

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

Es obligatorio llamarlo dentro de la función anónima () para evitar que remove () se ejecute antes de que termine slideUp. Otra forma igual es usar la función jQuery "promise ()". Mejor para aquellos a los que les gusta el código autoexplicativo, como yo;)

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

Con las promesas, también puede esperar a que finalicen varias animaciones, por ejemplo:

selectedLi.slideUp({duration: 5000, queue: false})
.fadeOut({duration: 3000, queue: false})
.promise().done(function() {
    selectedLi.remove()
})
famoso garkin
fuente
-2
selectedLi.slideUp(200, this.remove);

fuente
1
Probé: no elimina el elemento después de deslizarse hacia arriba.
Konstantin Spirin
Oculta eficazmente el elemento, pero en realidad no lo elimina del DOM.
andreszs