layui table.reload() 和 reloaddata 均不保留当前页码,必须显式传入 page: { curr: n } 才能维持页码;n 需实时取自 table.config[id]?.page?.curr,且搜索、改 limit 等场景应重置为第一页。

reload 时漏传 page 参数,页码必然回第一页
Layui 的 table.reload() 不是“局部刷新”,而是重新走一遍初始化流程,它会丢弃当前分页状态,只认你传进去的配置。如果你只传 where 或其他参数,但没带 page: { curr: n },Layui 就按原始配置里的 curr: 1 或 page: true 处理,结果就是跳回第一页。
- 必须显式传
page: { curr: n },只传curr: n(不包对象)无效 -
n不能写死,得实时取:用layui.table.config['yourTableId']?.page?.curr || 1 - 表格未初始化完成时
table.config可能为undefined,加空值判断是必须的 - 别用
$('input[lay-page]').val()或解析 DOM 文本取页码——翻页异步、无数据、快速连点时极易读错
用 reloadData 也得手动传 page
reloadData 是 Layui 2.8+ 新增的轻量方法,它不重走渲染逻辑,只刷新数据,但依然不保留当前页码。很多人以为它“更智能”,其实它和 reload 在页码处理上行为一致:不传 page 就默认回到第一页。
-
reloadData同样需要page: { curr: n }才能维持当前页 - 推荐封装一个通用函数,比如
reloadWithPage(id, where),内部统一取table.config[id]?.page?.curr - 如果表格列是动态生成的,或绑定了多次事件,
reloadData比reload更安全(不会重复绑定 click)
页面刷新后想保持页码,得靠 localStorage
用户 F5 刷新或关闭再打开页面,table.config 会被清空,此时没有“当前页”可读。唯一可靠的方式是在每次翻页完成时存到 localStorage,初始化时再读出来。
- 在
done回调里写:localStorage.setItem('userTable_curr', curr) - 初始化 table 时读:
curr: parseInt(localStorage.getItem('userTable_curr') || '1') - 注意:不要在
done里存res.curr,Layui 传给done的curr参数才是真实当前页码 - 如果用户清除了缓存或跨设备访问,这个方案会退化为默认第一页,属合理预期
修改每页条数(limit)时,curr 很可能要重置
用户点了“每页 100 条”,你只改 limit 不动 curr,Layui 会继续请求第 curr 页,但后端按新 limit 计算 offset,数据就错位了——可能空白、重复或漏行。
- 切换
limit时,推荐强制curr: 1,除非后端明确支持按新 limit 动态重算分页偏移 - 写法示例:
table.reload('userTable', { page: { limit: 100, curr: 1 } }) -
limits数组长度必须 ≥2 才渲染可交互下拉框;只写limits: [100]会生成一个不可点击的输入框 -
limit必须是正整数,字符串"100"或null都会导致 fallback 到默认 30 条











