jQuery slideUp (). remove () nie wydaje się pokazywać animacji slideUp przed usunięciem

94

Mam tę linię JavaScript, a zachowanie, które widzę, jest takie, że selectedLinatychmiast znika bez „zjeżdżania”. Nie jest to zachowanie, którego się spodziewałem.

Co mam zrobić, aby selectedLislajdy się podniosły, zanim zostaną usunięte?

selectedLi.slideUp("normal").remove();
Eric Schoonover
źródło

Odpowiedzi:

198

Czy uda się to naprawić, umieszczając wywołanie remove w argumencie wywołania zwrotnego do slideUp?

na przykład

selectedLi.slideUp("normal", function() { $(this).remove(); } );
seanb
źródło
4
Zwróć uwagę, że „wolno” i „szybko” to jedyne prędkości. Inne prędkości muszą być albo w milisekundach lub będą domyślnie 400. keyframesandcode.com/resources/javascript/deconstructed/jquery/...
bendman
19

Musisz być bardziej wyraźny: zamiast mówić „to” (co, jak się zgadzam, powinno działać), powinieneś zrobić to:

$("#yourdiv").slideUp(1000, function() {
    $(this).remove();
});
Blake
źródło
2
SORRY = zapomniałem usunąć swój identyfikator, powinno to być: $ ('# yourdiv'). SlideUp (1000, function () {$ ('# yourdiv'). Remove ();});
Blake
12
Używanie $ (this) zamiast $ ("# yourdiv") jest bardziej zoptymalizowane, ponieważ jQuery nie musi szukać węzła.
MaximeBernard
Używanie $("#yourdiv")zamiast $(this)jest całkowicie nadmiarowe i nie dlatego ten kod rozwiązuje problem OP. Ten kod rozwiązuje problem, ponieważ używa completewywołania zwrotnego.
Gavin
8

Najprostszym sposobem jest wywołanie funkcji „remove ()” wewnątrz slideUp jako parametru, jak powiedzieli inni, jak w tym przykładzie:

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

Konieczne jest wywołanie go wewnątrz funkcji anonimowej (), aby zapobiec wykonaniu metody remove () przed zakończeniem slideUp. Innym równym sposobem jest użycie funkcji jQuery „promise ()”. Lepsze dla tych, którzy lubią zrozumiały kod, jak ja;)

$("#yourdiv").slideUp("normal").promise().done(function() {
    $(this).remove();
});
xaviqv
źródło
3

Korzystając z obietnic, możesz również poczekać na ukończenie wielu animacji, np .:

selectedLi.slideUp({duration: 5000, queue: false})
.fadeOut({duration: 3000, queue: false})
.promise().done(function() {
    selectedLi.remove()
})
sławnygarkin
źródło
-2
selectedLi.slideUp(200, this.remove);

źródło
1
Testowałem - nie usuwa elementu po wysunięciu.
Konstantin Spirin
Skutecznie ukrywa element, ale w rzeczywistości nie usuwa go z DOM.
andreszs