2014-01-28 59 views
0

我有一個表,我有複選框作爲第一列,所以我可以選擇和刪除所有我想要的行。刪除沒有在jQuery數據表中呈現的行

要選擇行,我使用複選框單擊事件來記錄選定的cId(不是數據錶行id)並存儲在一個數組中。

我有一個刪除按鈕來刪除所有選定的行。我在click事件中使用以下代碼來刪除選定的行。

$.each(selectedChks, function (index, cId){ 
       checkbox = $("#chk-"+cId); 
       target_row=$(checkbox).closest("tr")[0]; 
       oDataTable.fnDeleteRow(target_row, null, false); 
    }); 
    oDataTable.fnDraw(); 

它似乎在呈現的行上正常工作。我可以刪除渲染表中的多行。

但是,如果我選擇的行在不同的頁面中,上面的代碼將失敗,並出現TypeError錯誤:s [b]未定義。

任何幫助,非常感謝。

+0

HTML在哪裏?如果你製作一個jsFiddle,你會得到更多的幫助。 –

+0

你的意思是「選定的行在不同的頁面」? – Kevin

+0

@Kevin,考慮我在數據表中有10頁。我檢查了第1頁上的一個複選框,並在第3頁中選中了一個複選框,並嘗試從selectedChks中刪除選定的行。 –

回答

0

這聽起來像你有問題刪除任何由於分頁被啓用而被隱藏的行。

我設置了一個小提琴,它看起來不像你可以刪除不在當前頁面中的行。儘管如此,還是有辦法的。

這是fiddle of a working demo

/* Init the table */ 
var oTable = $('#example').dataTable(), 
    selectedChks = ['1', '4', '8', '10', '14', '19']; 

/* Add a click handler for the delete row */ 
$('#delete').click(function() { 
    //revert table 
    oTable.fnDestroy(); 
    $.each(selectedChks, function (index, cId) 
    { 
     //now that we reverted the table, lets just use jQuery to remove the row 
     $("#chk-"+cId).closest('tr').remove(); 
    }); 
    //initialize new table, so that row counts etc are updated 
    oTable = $('#example').dataTable(); 
}); 
+0

我試過這個,但$ checkbox.parents('tr')。first()。get(0)返回未定義的行不在當前呈現頁面。 JavaScript在爲rownum計算時拋出錯誤。我也嘗試了target_row = $(複選框).closest(「tr」)[0]但同樣的問題。它可以識別當前渲染頁面中的行,但不識別任何其他頁面。 –

+0

@VijayKalidindi看看我剛剛發佈的這個小提琴,其中一種方法是恢復表格,刪除行然後初始化表格。 – Kevin