2011-12-04 13 views
14

Perché l'elemento non può essere rimosso nella richiamata di $.fadeout?dissolvenza in chiusura e rimuovere un elemento dopo alcuni secondi

Per esempio,

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


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

Questo funziona senza il callback,

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

}).remove(); 

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

ma rimuove l'elemento prima che l'elemento è completamente sbiadito. Quindi penso che dovrei chiamare lo remove() dopo qualche secondo?

Quindi, come posso farlo con remove()?

ho provato con questo, ma lo strato non verrà rimosso,

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


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


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

Ti sei accorto per caso che il tuo 'alert() 'succede prima che il' fadeOut' sia completo? ;) – RightSaidFred

risposta

33

Hai capito quasi subito, tuttavia è necessario verificare l'esistenza dell'elemento all'interno della callback, come segue:

$(".background-blackout").fadeOut('slow', function(){ 
    $(this).remove(); 
    // alert($('.background-blackout').length); 
    console.log($('.background-blackout').length); 
}); 
Problemi correlati