table.reload() 必须显式传 page: {curr: 1},否则页码不重置,后端仍按原页码查询;正确写法需包含 where、page: {curr: 1}、limit 和表格 id;多次点击需防并发覆盖;保持当前页需读 table.config['id']?.page?.curr;dom 页码文案仅由 reload 中 page 参数触发更新。

table.reload() 必须显式传 page: {curr: 1}
只改 where 参数,页码根本不会动——Layui 把 curr 当作独立状态,reload() 默认不继承、也不重置它。哪怕你清空搜索框再点一次,只要没写 page: {curr: 1},后端收到的还是上一页的 page=4,前几页数据就永远查不到。
常见错误写法:page: 1(不是对象)、where: {pageNum: 1}(Layui 不识别)、漏掉 limit 导致分页器显示错乱。
正确写法必须包含四项:where、page: {curr: 1}、limit、表格 ID:
table.reload('userTable', {
where: data.field,
page: {curr: 1},
limit: 10
});
多次点击搜索按钮引发页码“跳空”
用户连点两次搜索,可能触发两个 reload() 并发执行。第一个设了 page: {curr: 1},第二个没传 page,就会覆盖掉第一次的设置,结果页面卡在第 1 页但数据是空的(因为后端按 page=1 返回了,而第二次请求又把 curr 覆盖成未定义,Layui 自动兜底跳回第 1 页,但 DOM 渲染可能滞后)。
- 用按钮 loading 状态锁住提交,比如
$(this).addClass('layui-btn-disabled').prop('disabled', true) - 封装成函数,如
doSearch(),入口处判断是否正在加载 - 别在
form.on('submit')回调里直接堆 reload 逻辑,容易漏参数或节流
想保持当前页码而不是回第一页?得手动读 table.config
如果你的需求是“搜完留在当前页”,不能靠 DOM 文本(如读 .layui-laypage-em + em),也不能依赖全局变量硬记——多表格时会串;唯一可信来源是 table.config['yourTableId']?.page?.curr。
记得加兜底,防止表格还没初始化完就触发搜索:
const curr = table.config['userTable']?.page?.curr || 1;
table.reload('userTable', {
where: {status: 'active'},
page: {curr}
});
注意:这个值只反映前端当前状态,和后端返回的 count 无关。如果删光了最后一页数据,curr 还是 5,但实际只剩 2 页,就得在 done 回调里手动降级处理。
DOM 上的“当前第 X 页”文案不会自动更新
你改了 where、甚至手动改了 table.config,那个页码数字还是旧的——Layui 的分页栏文案完全由内部 page.curr 驱动,只有调用 reload() 并带 page: {curr: n} 才会同步刷新。
别去 $(".layui-laypage-em").next().text() 这种方式硬改,下次翻页会被 Layui 覆盖;也别指望 table.render() 重绘能修好,那是初始化用的。
最常被忽略的一点:page: {curr: 1} 这行代码必须出现在每一次 reload() 调用中,不管搜索条件有没有变、用户当前在哪一页。少这一行,就等于默认告诉后端:“请继续查第 N 页”,而不是“请从头开始查”。











