2009-11-05 13 views
6

Wydaje mi następujący kod powinien produkować te wyniki:jQuery zwrotna nie czekając na fadeOut

mademoiselle 
demoiselle 
mesdemoiselles 

Zamiast tego, jak „ma” znika „mes” zanika w podejmowaniu sekwencję:

mademoiselle 
madesdemoiselles 
mesdemoiselles 

Kod:

<span class="remove">ma</span><span class="add">mes</span>demoiselle<span class="add">s</span> 

$(document).ready(function() { 
    $(".remove").fadeOut(4000,function(){ 
     $(".add").fadeIn(5000);  
    }); 
}); 

Edit: Znalazłem pusty przedział, że jeśli usunąć błąd sprawia, że ​​odejdzie:

Problem polega na tym, że kod php generujący to używa przęseł jako symboli zastępczych. Zamierzam je zastąpić, jeśli będę musiał, ale jestem ciekawy, dlaczego tak się dzieje.

+0

Próbka produkuje oczekiwane zachowanie dla mnie na Safari 4.0.3 i FF 3.5. Jakie przeglądarki testowałeś? – outis

+0

Jakiej przeglądarki używasz, próbowałem tego w Firefoksie i działa tak, jak można się spodziewać. – Deeksy

+0

Próbowałem już na FF3.05 i Safari 4.03 To musi być coś innego na stronie. Czy muszę mieć jQuery w głowie? – Stephane

Odpowiedz

9

Dobrze, udało mi się odtworzyć Twój problem, zobacz przykład pod adresem http://jsbin.com/ocaha.

Co to jest, że jQuery widzi, że twój pusty <span> nie musi być wygaszony. Dlatego uważa, że ​​animacja została wykonana i jest wykonywana przez 0 ms zamiast oczekiwanych 4000 ms. Więc natychmiast zaczyna znikać w wszystkie z .adds.

Aby temu zapobiec, chciałbym filter odrzucić wszystkie puste elementy z zaznaczenia. W ten sposób:

$(document).ready(function() { 
    $(".remove") 
       .filter(function(){ return ! $(this).is(":empty"); }) 
       .fadeOut(4000, function(){ 
    $(".add").fadeIn(5000); 
    }); 
}); 

Zobacz przykład pracy pod numerem http://jsbin.com/ovivi.

+0

Niesamowita pomoc! Dziękuję Ci! – Stephane

2

Change ": pusty" do ": ukryty" jeśli nie działa:

$(document).ready(function() { 
    $(".remove") 
       .filter(function(){ return ! $(this).is(":hidden"); }) 
       .fadeOut(4000, function(){ 
    $(".add").fadeIn(5000); 
    }); 
}); 
Powiązane problemy