2013-08-03 156 views
0

我創建了一個Datatable,點擊一行時,該行將被突出顯示。jQuery Datatables在刷新後保持選擇

$("#example tbody").click(function(event) { 
    $(eTable.fnSettings().aoData).each(function(){ 
    $(this.nTr).removeClass('row_selected'); 
    }); 

$(event.target.parentNode).addClass('row_selected'); 

}); 

在表中的數據將被自動

function refreshTable(table){ 
    eTable.fnReloadAjax(null, null, true);  
}   

function tableRefresher() { 
    refreshTable(eTable); 
    tid = setTimeout(tableRefresher, 1000); // repeat myself 
} 

刷新表被刷新後,所選擇的行不再被突出顯示。

任何想法如何在刷新後保持選擇完好?

謝謝!

+0

我也試過這個:eTable._fnAjaxUpdate(),它確實做了一個ajax調用,但由於某種原因它並沒有使用獲取的數據更新表。 – user955732

回答

2

對於任何insterested,

這或多或少是我如何解決這個問題

首先存儲在一個變量隱藏選定的行號,selectedRowId

$('#example tbody tr').live('click', function() { 
    var data = eTable.fnGetData(this); 
    selectedRowId = data[4]; 
}); 

刷新表

refreshTable(eTable,'getAlerts'); 

function refreshTable(table, urlData) 
{ 
    $.getJSON(urlData, null, function(json) 
    { 
    //table = $(tableId).dataTable(); 
    oSettings = table.fnSettings(); 
    table.fnClearTable(this); 
    for (var i=0; i<json.aaData.length; i++) 
    { 
     table.oApi._fnAddData(oSettings, json.aaData[i]); 
    } 
    oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); 
    table.fnDraw(); 
    setSelectedRow(); 
    }); 
} 

並重新刷新行後選擇

function setSelectedRow(){ 
    $(eTable.fnSettings().aoData).each(function(){ 
     var data = eTable.fnGetData(this.nTr); 
     if(selectedRowId == data[4]){ 
      $(this.nTr).addClass('row_selected'); 
     } 
    }); 
} 
+0

既然你已經完成了我的建議,你可以將我的答案標記爲'接受'的答案 –

0

最簡單的方法是讓您的$("#example tbody").click()事件也存儲一個cookie,其中包含所選行的值。

然後在您的refreshTable(table)函數中讀取cookie並在ajax調用成功返回後重新添加'row_selected'類。

所以 - >表加載,用戶選擇一行,行索引存儲在cookie中,表刷新,cookie讀取,重新選擇行。

魔法!

+0

你也可以嘗試讓你的refreshTable()函數檢測在ajax調用之前選擇了哪一行,並在ajax調用之後重新設置它。 –

+0

它僅刷新表中的數據,而不是整個頁面。表格中的每一行都有一個隱藏的列,其中包含唯一值。所以應該可以存儲所選行的隱藏列的值,刷新數據,然後爲具有相同隱藏列值的行添加'row_selected'類。問題是如何做到這一點? – user955732

+0

我已經設法找到所選行的隱藏列中的唯一標識,如下所示: 'var selectedRowId; ('#example tbody tr')。live('click',function(){ var data = eTable.fnGetData(this); selectedRowId = data [4]; });' 現在,如何表數據刷新後找到相應的行? – user955732