2011-08-29 34 views
8

Tôi biết câu hỏi này đã được hỏi trước nhưng tôi dường như có một vấn đề khác với vấn đề đã được giải quyết trước đây. Tôi có một bảng và tôi muốn mỗi hàng có một liên kết xóa làm mất dần hàng của bảng và sau đó loại bỏ hàng của bảng khỏi DOM. Vấn đề đầu tiên của tôi là tôi không thể có được hiệu ứng jQuery fadeOut để làm việc trên các hàng của bảng và thấy rằng bạn phải thực sự gọi fadeOut trên các phần tử td của hàng. Vì vậy, đây là jJavascript tôi:FadeOut và loại bỏ hàng bảng

$('span.deleteItem').live('click', function() { 
    $(this).closest('tr').find('td').fadeOut('fast', 
     function(){ 
      $(this).parents('tr:first').remove();      
     });  

    return false; 
}); 

Yếu tố tuổi sống bên trong một td vì vậy tôi tìm thấy những yếu tố tr gần nhất khi nó được nhấn vào, và sau đó rơi chức năng fadeOut trên mỗi yếu tố td của nó. Điều này làm việc tuyệt vời.

Vấn đề là trong hàm gọi lại, 'this' thực sự tham chiếu phần tử cửa sổ chứ không phải phần tử td riêng lẻ đã bị ẩn. Từ sự hiểu biết của tôi 'này' được cho là để tham khảo các yếu tố đã bị mờ đi.

Bất kỳ ý tưởng nào?

+2

http://jsfiddle.net/TBMnZ/ Làm việc tốt cho tôi ... – opatut

Trả lời

13

Grab các "này" tham khảo và vượt qua nó trên:

$('span.deleteItem').live('click', function() { 
    var here = this; 
    $(this).closest('tr').find('td').fadeOut('fast', 
     function(here){ 
      $(here).parents('tr:first').remove();      
     });  

    return false; 
}); 
5

Tôi nghĩ rằng đây là những gì bạn đang tìm kiếm:

$('span.deleteItem').live('click', function() { 
    var tableRow = $(this).closest('tr'); 
    tableRow.find('td').fadeOut('fast', 
     function(){ 
      tableRow.remove();      
     } 
    ); 
}); 

EDIT: Tôi nghĩ Opatut is right, như hiển thị trong jsFiddle mình .

Các vấn đề liên quan