jQuery DataTable切换两组表头后仅一组支持排序问题求助
解决jQuery DataTables切换表头后排序异常的问题
看起来你现在的需求是根据选择的InspectionType切换DataTables的表头(一组显示Assigned Date,另一组显示Visited Date),但遇到了只有一组表头能正常排序的问题。先分析下你现有代码的问题:大量重复代码,切换时可能因为没有统一维护排序配置,导致某组表头的排序逻辑失效。
优化后的解决方案
我们可以把公共配置抽离出来,只动态修改不同的表头列配置,既减少冗余代码,也能保证所有表头的排序逻辑正常生效:
// 获取当前选择的检查类型 var InspectionType = $("#InspectionType").val(); // 定义所有初始化配置的公共部分 var commonTableOptions = { "bJQueryUI": false, "bServerSide": true, "bDestroy": true, "aaSorting": [[0, 'desc']], "sPaginationType": "full_numbers", "oLanguage": { "sEmptyTable": "<%: Resources.info_gen_norecordsavailable %>" }, "sAjaxSource": actionUrl2, "fnServerParams": function(aoData) { aoData.push( {"name": "DateFrom", "value": DateFrom}, {"name": "DateTo", "value": DateTo}, {"name": "RegionName", "value": RegionName}, {"name": "Name", "value": Name}, {"name": "InspectionType", "value": InspectionType} ); } }; // 根据检查类型动态生成列配置 var tableColumns = [ {"sName": "Job No", "bSearchable": true, "bSortable": true}, {"sName": "Vehicle No", "bSearchable": true, "bSortable": true}, {"sName": "TO Code", "bSearchable": true, "bSortable": true}, {"sName": "EPF NO", "bSearchable": true, "bSortable": true}, // 动态切换最后一列的表头 InspectionType == 0 ? {"sName": "Assigned Date", "bSearchable": true, "bSortable": true} : {"sName": "Visited Date", "bSearchable": true, "bSortable": true} ]; // 合并配置并初始化表格 var oTable = $('#PerformanceTableView').dataTable($.extend({}, commonTableOptions, { "aoColumns": tableColumns }));
关键改进点
- 抽离公共配置:把两组初始化代码中重复的部分提取出来,避免冗余,后续修改配置也更方便。
- 动态生成列配置:只针对需要变化的表头列做动态设置,保证所有列的
bSortable都保持true状态,不会出现某组表头排序失效的情况。 - 配置合并:用
$.extend合并公共配置和动态列配置,代码结构更清晰。
额外触发逻辑(可选)
如果InspectionType是通过下拉框切换的,记得在下拉框的change事件中先销毁旧表格再重新初始化,避免冲突:
$("#InspectionType").on("change", function() { // 先销毁已初始化的表格 if (typeof oTable !== 'undefined') { oTable.fnDestroy(); } // 重新执行上面的表格初始化代码 // ...(把前面的初始化代码放到这里) });
这样调整后,无论切换哪种报告类型,所有表头都能正常触发排序功能了。
内容的提问来源于stack exchange,提问作者atheek azmy
相关产品推荐
相关产品推荐

