2011-12-04 27 views
14

Tại sao không thể xóa phần tử trong phần gọi lại của $.fadeout?fadeout và loại bỏ một phần tử sau một vài giây

Ví dụ,

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


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

này hoạt động mà không gọi lại,

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

}).remove(); 

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

Nhưng nó loại bỏ yếu tố trước khi nguyên tố này đã hoàn toàn nhạt nhòa dần. Vì vậy, tôi nghĩ rằng tôi nên gọi remove() sau một vài giây?

Vậy làm cách nào tôi có thể thực hiện điều đó với remove()?

tôi đã cố gắng với điều này nhưng lớp sẽ không được gỡ bỏ,

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


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


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

Bạn có cơ hội nhận thấy rằng 'alert()' của bạn xảy ra trước khi 'fadeOut' hoàn thành? ;) – RightSaidFred

Trả lời

33

Bạn đã nhận nó gần như ngay, tuy nhiên bạn cần phải kiểm tra sự tồn tại của yếu tố bên trong gọi lại, như sau:

$(".background-blackout").fadeOut('slow', function(){ 
    $(this).remove(); 
    // alert($('.background-blackout').length); 
    console.log($('.background-blackout').length); 
}); 
Các vấn đề liên quan