jquery 的datatables插件問題

 
翻頁後js失效;

重繪事件-當表格重繪完成後
從新綁定事件: draw.dt
$('#example').dataTable();
 
$('#example').on( 'draw.dt', function () {
    console.log( 'Redraw occurred at: '+new Date().getTime() );
} );

  





(多列排序)
//按第二列降序排序,

出現提示: Datables wrning(table id='example'):Cannot reinitialise DataTable. To retrieve the
Datables object for this table,please pass eithser no arguments to the dataTable() function,

解決方法:

一、加 "bDestroy":true,和"bRetrieve": true, 只是能屏蔽提示。 2、 $(document).ready(function () { $('#Todolisttable').dataTable().fnDestroy(); //必須加fnDestroy() 這個.將這個表格先銷燬,而後在從新生成。 $('#Todolisttable').dataTable({ "aaSorting": [ [1, "desc"] //按第二列降序排序, ] }); });
2、 $(document).ready(function () {
            $('#Todolisttable').dataTable().fnDestroy(); 
            $('#Todolisttable').dataTable({
                "aaSorting": [
                    [1, "desc"] 
          ] }); });

 

用了DataTables作爲展現數據的表格。該控件支持分頁,並且又漂亮。這是官網的地址http://www.datatables.net/ 。本文記錄我在工做中用到DataTables的相關功能及實現。javascript

 

在採用這個控件以前,服務端向網頁返回數據,頁面用javascipt將數據拼接成html的表格,代碼中充斥着不少 += '<td>' '<tr>' '<a>'。並且還要處理分頁,每一個頁碼還要本身綁定一個拼接的url請求,代碼不只長,並且頁面的展現效果很差功能也不夠強大。php

 

 

採用了這個控件展現數據後,javascript的代碼減小了70-80行。它要求服務端要按照它規定的數據格式返回數據,接着會幫咱們自動處理分頁和數據的展現,就不用咱們手動拼接字符串構造table表的元素了。html

 

先看代碼:前端

 

[javascript]  view plain copy
 
  1. function generate_table() {  
  2.     g_table = $('#historyResult').dataTable({  
  3.         "oLanguage": {  
  4.             "sLengthMenu": "每頁 _MENU_ 條數據",  
  5.             "sZeroRecords": "沒有數據",  
  6.             "sInfo": "_START_ - _END_ 總(_TOTAL_)",  
  7.             "sInfoEmpty": "0 - 0 總數: 0"  
  8.         },  
  9.         "sPaginationType": "full_numbers",  
  10.         "bProcessing": true,  
  11.         "bServerSide": true,  
  12.         "bSort":false,  
  13.         "bFilter": false,  
  14.         "sAjaxSource": "/index.php/history/queryHistory",  
  15.   
  16.         "fnServerParams": function( aoData )  
  17.         {  
  18.             aoData.push(  
  19.                     {"name":"keywords","value":$('#keyword_txt').val(),  
  20.                     {"name":"start_date","value":$('#start_date_txt').val()},  
  21.                     {"name":"end_date","value":$('#end_date_txt').val()}  
  22.                 )  
  23.         }  
  24.     });  
  25. }  

 

 

具體的參數意思能夠參考官方文檔。這裏提一下fnServerParams。這個參數能夠幫咱們傳遞頁面的其餘參數,這個例子中,我傳遞了關鍵字、起止日期信息,主要用於服務端的數據查找過濾。java

 

用chrome看一下控件會向服務端傳遞什麼:chrome

 

 

這是底部的分頁欄json

 

 

當我點第二頁時,傳遞參數以下:ide

 

注意到iDisplayLength是10,由於我默認是每頁展現10條數據,這個值能夠調整。當我點第二頁時,iDisplayStart從0變到10。其實分頁就是這麼回事,前端告訴服務端,我須要那段數據,你給我找出來返回給我。this

 

服務端的返回格式以下(PHP):url

[php]  view plain copy
 
  1. $ret = array(  
  2.                 "sEcho" => intval($_GET['sEcho']),  
  3.                 "iTotalRecords" => $data_count,  
  4.                 "iTotalDisplayRecords" => $data_count,  
  5.                 "aaData" => array()  
  6.             );  

 

$data_count是總數據量。aaData是須要展現的數據,以後能夠填充。代碼以下

[php]  view plain copy
 
  1. $ret['aaData'][] = array($id, $user, $action, $business, $files, $time, $result);  

 

這是填充一條數據的PHP代碼,注意變量的先後位置很重要,這決定了表格中展現數據的位置。若是想在表格中嵌套<a>標籤,這也是能夠的。在服務端將數據拼接成a標籤返回便可。

 

填充完後就返回數據:

[php]  view plain copy
 
  1. echo json_encode($ret);  

 

 

我所維護的頁面有一個功能,就是能根據日期和關鍵字查找記錄。當咱們點擊表格中的下一頁時,它會自動的向服務端發起一次數據請求。然而,怎麼讓用戶點擊一個按鈕時,也發起一次數據請求呢?

 

個人辦法是:將這個表格先銷燬,而後在從新生成。代碼以下:

 

[javascript]  view plain copy
 
  1. $("#search").click(function(){        
  2.         g_table.fnDestroy();  
  3.         generate_table();  
  4.   });  

 

 

從新生成表格會默認第一頁,而每次搜索都是根據不一樣的關鍵字和日期的,因此跳到第一頁是合理的。若是不用fnDestroy(),試圖直接覆蓋g_table從新生成,這是不容許的。

 

至此,實現了基於DataTables的數據查找及分頁。

相關文章
相關標籤/搜索