2011-10-27 26 views
0

在此page使行選擇一個內置功能的jQuery數據表

你可以看到下面的代碼附加click處理到tbody實行行選擇功能實際DataTable對象是inited前:

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

/* Init the table */ 
oTable = $('#example').dataTable(); 

由於我需要此功能爲我的項目中的所有數據表,我希望這些代碼在每個數據表對象初始化時自動運行。

我已發現,其中這些代碼可以被添加的可能的地方here(這是fnInitComplete事件):

然而,代碼應該缺省運行,而不是像本例中,將它們傳遞給fnInitComplete事件在選項對象中。

您認爲這可以做什麼?

非常感謝大家。

編輯:

最終,我決定來定義一個全局表的選擇對象,我會克隆,並在必要時修改它用它來初始化這樣的數據表前:

//default table options defined globally, you can namespace it if you like 
var jqDataTablesDefaultOptions:{ 
    "fnDrawCallback": function (oSettings, json) { 
     var nTrs = this.fnGetNodes(); 
     $(nTrs).click(
     function(){ 
      $(nTrs).removeClass('row_selected'); 
      $(this).addClass('row_selected'); 
     }       
    ); 
    }, 
    "aLengthMenu": [5,10,15,20,100], 
    "iDisplayLength":5, 
    "oLanguage": { 
     "sUrl": "/assets/lib/DataTables-1.8.2/media/language/zh_TW.txt" 
    }, 
    "bJQueryUI": true 
    "sPaginationType":"full_numbers"      
}; 

在每一個我使用的數據表頁,我將有以下代碼:

//copy the default options 
var tableOptions=$.extend(true,{},jqDataTablesDefaultOptions); 
//modify the options if necessary 
tableOptions.iDisplayLength=10; 
//init the datatable 
$('#example').dataTable(tableOptions); 

請隨意閱讀本page因爲我使用fnDrawCallback而不是fnInitComplete

+0

它看起來像你可能做的唯一的事情是「猴子補丁」一個內置的DataTables初始化函數也可以調用你自己的自定義代碼,或者至少合併到你的自定義默認選項中。除非有其他方法可以爲我在文檔中沒有看到的DataTables設置默認選項? – GregL

回答

1

我會製作我自己的插件並使用jQuery $ .extend函數來擴展您使用默認設置所設置的選項。如果您不想爲此製作插件,則可以使用DataTools plugin

另一種選擇是編輯DataTable js文件 - 在代碼中搜索「classSettings」。但顯然這有很大的缺點,如果你想升級到新版本,你必須重新編輯它。

而對於這種東西,我寧願用fnRowCallback,因爲它有表TR厄運元素,您可能綁定任何你想要的事件的說法。但是如果你想使用任何jQuery功能,你必須把它包裝到jQuery中。