2011-12-04 8 views
14

なぜコールバックで要素を削除できないのですか$.fadeout?例えば数秒後に要素をフェードアウトして削除します

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


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

これは、コールバックなしで動作

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

}).remove(); 

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

しかし、要素が完全にフェードアウトする前にその要素を削除します。だから私は数秒後にremove()と呼ぶべきだと思いますか?

remove()でどうすればいいですか?

私はこれを試みたが、層が除去されることはありません、

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


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


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

'fadeOut'が完了する前に' alert() 'が起こっていることに気づいたのですか? ;) – RightSaidFred

答えて

33

あなたはそれがほとんど右だ、次のように、しかし、あなたは、コールバック内の要素の存在をテストする必要があります。

$(".background-blackout").fadeOut('slow', function(){ 
    $(this).remove(); 
    // alert($('.background-blackout').length); 
    console.log($('.background-blackout').length); 
}); 
関連する問題