initSort必须为{field:'xxx',type:'desc'}格式,字段名须与cols中某列field完全一致且该列sort:true;服务端分页时需配合autoSort:false及done回调手动sort或reload实现真正排序控制。

initSort 必须写成完整对象,字段名和 type 不能错
直接写 initSort: {field: 'score', type: 'desc'} 才生效。写成 initSort: 'score'、initSort: null、漏掉 type 或拼错为 'descending' 都会静默失效。
字段名必须和 cols 中某列的 field 值**完全一致**(包括大小写、下划线),且该列必须设 sort: true。
-
initSort不是可选参数,不写或格式不对 = 没默认排序 - 只支持单字段,默认不支持多字段联合排序
- 如果用
data数组传数据,initSort会立刻前端重排;如果用url加载,它只在done回调执行后对已加载数据起作用
服务端分页下 initSort 看似无效?先确认后端是否干扰了顺序
开了 page: true 时,Layui 默认信任后端返回的数据顺序。如果你的接口 SQL 里写了 ORDER BY score DESC,那 initSort 就只是个视觉提示——它不会二次排序。
想让 initSort 真正控制排序逻辑,有两个选择:
- 关掉后端
ORDER BY,让 Layui 全权负责前端内存排序(仅适用于小数据量) - 保持后端排序,但把
autoSort设为false,并在done回调里手动调用table.sort('score', 'desc')
注意:table.sort() 不发请求,只重排当前页已加载的数据;翻页后仍按后端返回顺序,不受影响。
点击表头后默认排序丢失,这是设计行为,不是 bug
Layui 认为用户主动点过表头,就以用户操作为准,不再回退到 initSort 状态。刷新页面会重置,但点击其他列再点回来,不会自动恢复。
如果每次进入都希望强制回到默认排序,得自己干预:
- 在
done回调中记录初始状态,比如initialSort = {field: 'score', type: 'desc'} - 监听
table.on('sort(demo)', function(obj){}) - 判断
obj.field !== 'score' || obj.type !== 'desc'时,再调用table.sort('score', 'desc') - 别无条件调用,否则可能触发死循环
想走服务端排序?initSort 只是起点,关键在 sort 事件里 reload
initSort 本身不触发任何请求。真要服务端排序,必须:
- 设
autoSort: false,禁用前端自动排序 - 监听
sort事件,在回调中用table.reload()把排序参数传给后端 - 例如:
where: { sortField: obj.field, sortOrder: obj.type }
此时 initSort 的作用只剩初始图标显示和首次 reload 的参数来源——它只是个“默认值占位符”,不是执行器。











