2011-11-25 57 views
0

有很多演示說明如何淡出表格行,而爲了IE的緣故,我們必須淡出表格單元格,然後在動畫完成後刪除該行。例如,這個問題:fadeout and remove table rowjQuery ajax在淡出並刪除表格行動畫後

我有這個技術很好。現在我想在行被淡出並刪除後用ajax調用刷新我的表。如果我將這個ajax加載到fadeOut完成回調函數中,它會針對表格中的每一列激發一次(因爲我正在淡出表格單元格而不是行)。這導致一堆Ajax請求堆積起來。 (工作正常,胸圍是浪費和不好的做法。)

所以我想淡出並刪除一個表格行,然後觸發一個事件/只調用一次函數來更新網格。這在jQuery中的最佳做法是什麼?我需要動畫化所有表格單元格,但只有一個動畫完整回調。

.remove()上沒有回調函數,所以我應該使用其他效果(如.hide()),並將.remove()放入其回調函數中以及ajax?這對於跨瀏覽器兼容性的公平性如何?在舊版本的IE中,是否存在任何已知的影響表格行的問題?


注:不,它使任何區別,但我碰巧使用它是建立在jQuery UI的頂部的wijmo網格小部件。但它只是一個標準的HTML表格。淡出/刪除工作正常。

回答

0

你面臨的問題是,fadeOut回調執行對每個匹配的元素(所有td S),而不是整個集合。你需要做的是把最後一個元素消失後的remove和ajax。下面你可以找到你引用的更新,以符合這種需求的問題的代碼(警報&刪除將只執行一次):

// don't use live, switch to delegate 
$('#tbl').delegate('td', 'click', function() { 
    var tr = $(this).parents('tr:first'), 
     tds = tr.find('td'), 
     l = tds.length; 

    tds.fadeOut('fast', function(){ 
     if (! --l) { 
      tr.remove();      
      alert('ajax'); 
     } 
    });  

    return false; 
}); 

這裏是它在行動一個小例子:http://jsfiddle.net/a76A6/2/

+0

該作品很好,並刪除* last * td上的行來完成它的淡出而不是* first * td。我不知道它會產生巨大的差異,但至少在理論上對我來說似乎「更加正確」。我甚至沒有想過使用閉包。 :) – BenSwayne