如何禁用jQuery DataTables默认排序?设置后仍自动排序求助
解决jQuery DataTables默认排序无法禁用,同时保留手动排序功能的问题
你遇到的问题其实很典型——明明设置了order: []或者aaSorting: []想让表格保持原始数据顺序,但总计行还是被排序到中间,修改bSortable也没效果,唯一能生效的bSort: false又完全锁死了手动排序。核心原因是你开启了stateSave: true,这个功能会把用户之前的排序、分页等状态存在本地存储里,每次初始化表格时都会自动恢复这些状态,直接覆盖了你设置的初始排序规则!
解决方案
根据你是否需要保留状态保存功能,分两种处理方式:
方案一:不需要状态保存(最简单)
如果不需要记住用户之前的分页、排序状态,直接把stateSave设为false,同时保持order: []指定初始不排序,这样表格就会严格按照你从BLL获取的原始数据顺序渲染,同时表头的排序按钮依然可用,用户可以手动触发排序:
tblStats = $("#tblStats").DataTable({ data: [], dom: 'lfrtip', stateSave: false, // 关闭状态保存 order: [], // 初始不排序,保持数据原始顺序 "columns": [ { "data": "Area" }, { "data": "Total" }, { "data": "Cnt_Certified" }, { "data": "Cnt_NotCertified" }, { "data": "Percentage_cert" } ], "pageLength": 15, processing: true });
方案二:需要保留状态保存(但排除排序状态)
如果需要记住用户的分页状态,但不想保存排序状态,那可以通过自定义stateSaveCallback和stateLoadCallback来过滤掉排序相关的状态,确保每次初始化时都用原始顺序:
tblStats = $("#tblStats").DataTable({ data: [], dom: 'lfrtip', stateSave: true, // 保存状态时移除排序信息 stateSaveCallback: function(settings, data) { delete data.order; // 删除排序状态 localStorage.setItem('DataTables_' + settings.sInstance, JSON.stringify(data)); }, // 加载状态时强制设置初始不排序 stateLoadCallback: function(settings) { var savedState = JSON.parse(localStorage.getItem('DataTables_' + settings.sInstance)); if (savedState) { savedState.order = []; // 强制初始不排序 } return savedState; }, order: [], // 初始不排序 "columns": [ { "data": "Area" }, { "data": "Total" }, { "data": "Cnt_Certified" }, { "data": "Cnt_NotCertified" }, { "data": "Percentage_cert" } ], "pageLength": 15, processing: true });
为什么之前的修改无效?
- 你设置
aTargets: [0], bSortable: false只是禁用了Area列的排序功能,但stateSave加载的旧排序状态依然会生效,所以表格还是会按照之前的排序规则渲染,同时其他列也被你误禁用了排序; bSort: false是完全禁用整个表格的排序功能,所以初始不会排序,但用户也无法手动触发排序,不符合你的需求;- 核心矛盾就是
stateSave的状态覆盖了你设置的初始排序规则,只要解决这个冲突,问题就迎刃而解了。
内容的提问来源于stack exchange,提问作者NoBullMan
相关产品推荐
相关产品推荐

