必须显式配置initSort对象,否则表格加载时不会按任何字段排序;它必须是{field:'xxx',type:'asc'|'desc'}格式的顶层参数,仅对sort:true且字段名完全匹配的列生效,不支持多字段排序。
必须显式配置 initsort 对象,否则表格加载时不会按任何字段排序,哪怕列里写了 sort: true 也无效。
initSort 是唯一生效的初始化排序配置
initSort 不是可选参数,而是强制要求的完整对象,且只支持单字段。常见错误是把它写成 null、undefined 或字符串,Layui 会直接忽略。
-
field值必须和列定义中的field完全一致(大小写、下划线都不能错) -
type只能是"asc"或"desc",写成"ascending"或"up"都静默失效 - 如果用
data直接传数组,initSort会立即对内存数据排序;但用url加载时,它只在done回调执行后起作用
为什么设置了 initSort 还没效果?重点看后端和分页
最常踩的坑是后端接口本身已排序,而你又开了 page: true。Layui 分页模式下默认信任后端返回顺序,不会二次前端排序。
- 若后端 SQL 含
ORDER BY,要么关掉它,让 Layui 全权处理;要么加autoSort: false,再手动调用table.sort() - 用
url时,initSort不会触发重新请求,只对已加载的数据重排 —— 所以服务端分页场景下,它其实不生效 - 检查浏览器 Network 面板,确认接口返回的数据确实是未排序原始顺序
点击表头后 initSort 状态丢失是正常行为
Layui 认为用户手动点过表头,就以用户操作为准,不再回退到初始状态。这不是 bug,是设计逻辑。
- 想每次刷新都重置回默认排序,得监听
sort事件,在里面判断是否首次触发或字段非默认,然后调用table.sort('score', 'desc') - 注意:
table.sort()不发请求,只重排当前内存数据;服务端分页时,这一步对后续翻页无影响 - 如果你用的是
data数组而非url,这个重排才是真有用的
真正容易被忽略的是:initSort 和 sort 事件本质是两套逻辑——前者只跑一次,后者接管所有后续交互;混用时务必分清数据来源(前端内存 or 后端响应)和分页开关状态。


















