layui的table.reload()默认重置页码为第一页,必须显式传入page: { curr: n }才能保持当前页;因reload会丢弃分页上下文,仅从原始配置读取页码,而初始配置通常为page: { curr: 1 }或page: true。
reload 后页码默认回到第一页,必须显式传入 page: { curr: n } 才能保持当前页。这不是 bug,是 layui 的设计行为——reload 会重走初始化流程,但不会自动继承上次的页码状态,除非你明确告诉它。
为什么 reload 不保留页码?
Layui 的 table.reload() 本质是“重新渲染 + 重新请求”,它会丢弃当前实例的分页上下文,从配置项里读取 page.curr。而你原始配置中写的往往是 page: true 或 page: { curr: 1 },所以 reload 后自然回到第一页。
- 后端接口返回的
curr字段不参与前端页码控制,Layui 只认自己维护的table.config[id].page.curr - 如果你在
done回调里改过window.currPage这类变量,reload不会自动读它 -
where参数不影响页码,只影响请求参数;漏传page就等于没告诉 Layui “我要留在这一页”
怎么安全地传入当前页码?
最稳妥的方式是直接从表格实例里读,而不是靠全局变量或 DOM 解析(比如 $(".layui-laypage-em").next().html() 这种写法在异步、快速翻页或无数据时容易出错)。
- 用
layui.table.config['yourTableId'].page.curr获取实时页码,它在每次翻页、搜索后都会更新 - 必须传完整对象
{ curr: n },只传数字curr: n无效 - 建议加空值判断:如果表格未启用分页,
.page可能为undefined,直接取.curr会报错
table.reload('userTable', {
page: { curr: layui.table.config['userTable']?.page?.curr || 1 },
where: { keyword: $('#keyword').val() }
});
reloadData 能不能替代 reload?
可以,但要注意:reloadData 是 Layui 2.8+ 新增的轻量方法,它只刷新数据、不重走初始化,因此更干净——但它同样不保留页码,也得手动传 page。
-
reloadData不触发done回调,也不重新绑定事件,适合纯数据更新场景 - 如果你依赖
done里做的 DOM 操作或状态同步,reloadData之后得手动补一次 - 别为了省事用
reload代替reloadData,尤其当列配置动态生成、或绑定了多次 click 事件时,重复reload很可能造成事件叠加
页码不是“自动延续”的状态,而是你每次重载时都要主动声明的上下文。最容易被忽略的点是:你以为 page: true 就够了,其实它只控制是否显示分页栏,和当前页码值完全无关。











