table.reload() 默认重置页码是因为其设计为重新初始化分页状态,将 page.curr 置为无效值,触发跳回第一页;必须显式传入 page: { curr: n } 才能保持当前页。
必须显式传入 page: { curr: n },否则 table.reload() 一定会跳回第一页。
为什么 reload 默认重置页码
Layui 的 table.reload() 设计上就是“重新初始化分页状态”,它会把内部 page.curr 置为 0 或未定义,而分页逻辑中只要 curr 不是有效正整数,就强制跳到第一页。这不是 bug,是默认行为——它假设你 reload 是为了换条件、清缓存、重走全流程。
-
where参数只合并查询条件,不继承也不影响分页位置 - 不传
page就等于没告诉 Layui “我想留在哪页”,它只能按规则兜底 - 哪怕你只改了
data字段(用reloadData),也一样会丢页码,除非手动透传page
怎么安全拿到当前页码再传回去
别读 DOM(比如 $(".layui-laypage-em").next().html()),容易错位或异步滞后;也别靠全局变量硬记,多表格时易冲突。最稳的方式是从 table.config 实时取:
-
table.config['yourTableId']?.page?.curr是唯一可信来源(Layui 2.8+ 维护在此) - 加空值判断,防止表格还没 render 完就调 reload:
|| 1 - 如果用了自定义
request,确保后端返回的count正确,否则页码超出范围会被自动矫正
示例:
const curr = table.config['userTable']?.page?.curr || 1;
table.reload('userTable', {
where: { status: 'active' },
page: { curr }
});
reloadData 和 reload 到底该选哪个
二者都需手动传 page,但适用场景不同:
-
reloadData:只刷新数据,不重请求、不重绑定事件,适合局部更新(如编辑某行后仅替换那条数据)。但它不保留任何分页上下文,page必须显式传,且只支持透传配置项,不走完整生命周期 -
reload:完整重载,会重新拉接口、重绑事件、重渲染工具栏。如果你有动态列、自定义done回调或依赖闭包状态,重复reload可能导致事件叠加、状态错乱 - 简单原则:只改数据 → 用
reloadData+page;改条件/清缓存/保结构 → 用reload+page
页码不是表格“记得”的东西,是你每次调用时必须主动声明的参数。漏掉 page: { curr: n } 这一行,用户就会卡在空页、搜不到结果、以为功能坏了——而问题往往藏在那一行没写的代码里。











