2008-11-21 10 views

Odpowiedz

174

Może to naprawić, ustawiając wywołanie w argumencie wywołania zwrotnego na slideUp?

np

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

Zauważ, że „wolno” i „szybko "są jedynymi prędkościami. Inne prędkości muszą być w milisekundach lub domyślnie 400. http://www.keyframesandcode.com/resources/javascript/deconstructed/jquery/#speeds – bendman

-1
selectedLi.slideUp(200, this.remove); 
+1

Testowałem - nie usuwa elementu po wysunięciu. –

+0

Efektywnie ukrywa element, ale tak naprawdę nie usuwa go z DOM. – andreszs

11

Musisz być bardziej wyraźne: zamiast mówić "to" (który Zgadzam powinno działać), należy to zrobić:

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

SORRY = i zapomniałem usunąć mój identyfikator, powinno 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

+0

Użycie '$ (" # yourdiv ")' zamiast '$ (this)' jest całkowicie zbędne i nie jest to powód, dla którego ten kod rozwiązuje problem OP. Ten kod rozwiązuje problem, ponieważ używa polecenia "complete". – Gavin

5

Najprostszy sposób wywołuje funkcję "remove()" wewnątrz slideUp jako parametr, jak powiedzieli inni, jak w tym przykładzie:

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

Konieczne jest wywoływanie go wewnątrz funkcji anonimowej(), aby zapobiec wykonaniu polecenia remove() przed zakończeniem operacji slideUp. Innym równym sposobem jest użycie funkcji jQuery "obietnica()". Lepsze dla tych, którzy lubią intuicyjną kod, tak jak ja;)

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

Korzystanie obietnice można też czekać na wielu animacji, aby uzyskać gotowy, np:

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