2011-12-04 15 views
14

¿Por qué el elemento no se puede eliminar en la devolución de llamada de $.fadeout?fadeout y eliminar un elemento después de unos segundos

Por ejemplo,

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


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

Esto funciona sin la devolución de llamada,

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

}).remove(); 

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

Pero remueve el elemento antes de que el elemento se ha desvanecido completamente fuera. ¿Entonces creo que debería llamar al remove() después de unos segundos?

Entonces, ¿cómo puedo hacer eso con remove()?

he intentado con esto, pero la capa no se eliminará,

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


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


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

¿Notó por casualidad que su 'alerta()' ocurre antes de que 'fadeOut' se complete? ;) – RightSaidFred

Respuesta

33

que lo tienes casi a la derecha, sin embargo es necesario probar la existencia del elemento dentro de la devolución de llamada, de la siguiente manera:

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