2011-12-04 13 views
14

Dlaczego nie można usunąć elementu w oddzwonieniu $.fadeout?Zblokuj i usuń element po kilku sekundach

Na przykład

$(".background-blackout").fadeOut('slow', function(){ 
    // Remove all the layer. 
     $(this).remove(); 
})); 


alert($('.background-blackout').length); 
// return 1 

To działa bez zwrotnego,

$(".background-blackout").fadeOut('slow', function(){ 

}).remove(); 

alert($('.background-blackout').length); 
// return 0. 

Ale usuwa element zanim element całkowicie wygaszone. Więc myślę, że powinienem zadzwonić po remove() po kilku sekundach?

Jak mogę to zrobić przy pomocy remove()?

Próbowałem z tym, ale warstwa nie zostanie usunięty,

$(".background-blackout").fadeOut('slow', function(){ 
}); 


setTimeout(function(){ 
    $(".background-blackout").remove(); 
},2000); 


alert($('.background-blackout').length); 
// returns 1. 
+4

Czy przypadkiem zauważyłeś, że twoja funkcja 'alert()' występuje przed zakończeniem 'fadeOut'? ;) – RightSaidFred

Odpowiedz

33

Masz prawie rację, jednak trzeba przetestować istnieniu elementu wewnątrz zwrotnego, co następuje:

$(".background-blackout").fadeOut('slow', function(){ 
    $(this).remove(); 
    // alert($('.background-blackout').length); 
    console.log($('.background-blackout').length); 
}); 
Powiązane problemy