table.reload() 和 reloaddata 默认跳回第一页,必须显式传 page: { curr: n } 以保留当前页码,n 应取自 layui.table.config['id']?.page?.curr || 1,且搜索重查需主动设 curr: 1。

table.reload() 必须显式传 page: { curr: n }
默认 reload 一定会跳回第一页,这不是 bug,是 Layui 的初始化设计逻辑——它会丢弃当前分页状态,只读取你传入的配置。不传 page,就等于没告诉 Layui “我要留在哪页”,它只能按规则兜底到第一页。
常见错误:只改 where 参数,比如搜索时写 { where: { keyword: 'abc' } },却漏了 page,结果页面闪一下就回到第一页。
- 必须传完整对象:
page: { curr: n },不能只传数字curr: n或page: n - 最稳妥的
n来源是layui.table.config['yourTableId']?.page?.curr || 1,不是 DOM 解析、不是全局变量、也不是table.cache - 如果表格还没初始化完成(比如刚进页面就调 reload),
table.config['id']可能为空,加|| 1是必要防御
用 reloadData 也得手动带 page
reloadData 是 Layui 2.8+ 新增的轻量刷新方法,它不重走初始化流程,也不重新绑定事件,适合纯数据更新。但它和 reload 一样,默认不继承当前页码。
很多人以为 reloadData 能“自动保留上下文”,结果一刷还是回首页——因为它的分页逻辑和 reload 共享同一套规则:没传 page,就当全新加载。
-
reloadData不触发done回调,所以别指望在done里补页码 - 如果你依赖
done做 DOM 同步或状态还原,用reloadData后得手动补一次 - 示例写法:
table.reloadData('userTable', { page: { curr: layui.table.config['userTable']?.page?.curr || 1 }, where: { status: 'active' } })
搜索时要回第一页?那就显式传 page: { curr: 1 }
点击搜索按钮后保持当前页是默认行为,但业务上往往需要“重头查”——这时反而要主动把 curr 设为 1。别指望 where 里塞 pageNum: 1 或 page: 1,Layui 完全不认这些字段。
只传 page: { curr: 1 } 才有效,而且这个参数必须每次搜索都带上,哪怕用户就在第一页点搜索,也不能省。
- 漏掉
limit可能导致分页器显示错乱(比如显示“每页 30 条”,但实际只渲染 10 条) - 快速连点搜索容易引发异步覆盖,建议加 loading 锁或节流标志位
- DOM 上显示的“当前第 X 页”文案,只随
page.curr变化而更新,不是靠接口返回值驱动
滚动条不回顶?在 done 回调里用 setTimeout 滚动
分页切换后滚动条卡在中间,不是表格没刷新,而是 Layui 不负责页面滚动。直接在 page 事件里调 window.scrollTo(0, 0) 会失败,因为此时新 DOM 还没渲染完。
唯一可靠时机是 done 回调,且需包裹 setTimeout 确保 DOM 已就绪。
- 不要用
page事件监听来滚动,它触发太早 - 局部滚动容器(比如表格外层有
overflow-y: auto)时,应操作该容器的scrollTop = 0,而非window - 示例:
done: function() { setTimeout(() => { $('.table-container')[0].scrollTop = 0; }, 0); }
table.config 里,不是 DOM,也不是缓存数组;任何绕过它的取值方式(比如解析页码文本、读 input 值、靠全局变量记)在异步翻页、空数据、快速操作下都容易失效。











