唯一可靠方式是监听 table.on('page(filter)', callback) 事件,回调参数 obj.curr 即实时当前页码,obj.limit 为每页条数;直接读 table.config.page.curr 或查 DOM 均不可靠。

监听 page 事件才是唯一可靠方式
直接读 table.config.page.curr 或查 DOM 输入框,拿到的几乎总是初始值或过期值。Layui 表格的页码是运行时状态,不暴露为可读属性,只通过事件同步。必须用 table.on('page(filter)', callback) 监听,回调参数 obj.curr 才是真实当前页码。
obj.curr 和 obj.limit 必须成对使用
后端分页请求不能只拼 ?page=3,漏掉每页条数会导致数据错乱或 400 错误。正确写法是:
axios.get('/api/list', {
params: {
page: obj.curr,
limit: obj.limit
}
})
常见错误包括:
- 把
obj.curr当字符串用(如"3"),后端解析失败但无明显报错 - 在
jump回调里没判first,导致首次渲染就发重复请求 - reload 时只传
page: {curr: 5}却漏了where或limits,页码跳转成功但数据没变
手动跳转指定页必须走 table.reload()
想点击按钮跳到第 5 页?别改 input 值、别调 laypage.render()、更别设 table.config.page.curr = 5——这些都不触发事件、不同步 UI、也不重载数据。唯一正解是:
table.reload('myTable', {
page: { curr: 5 }
})
注意点:
-
'myTable'必须和render()时传的id一致,否则找不到实例 - 如果表格启用了服务端分页,
curr会自动拼进 URL;前端分页则需确保data数组长度和count匹配,否则页码可能被重置 - 不要在
done回调里立刻再调一次reload(),容易覆盖刚加载的数据
临时读取当前页码(比如按钮点击时)要防未加载
如果不在事件回调里,而是在某个按钮点击 handler 中需要当前页码,不能假设表格已加载完成。得加守卫:
const cache = table.cache['myTable']
if (!cache || cache.length === 0) return // 还没加载完,不执行
// 此时可安全读 config 获取 limit 和 curr?不行 —— config.page.curr 仍是初始值
// 只能靠缓存:你得自己在 done 或 page 事件里把 curr 存下来,例如:
let currentPage = 1
table.on('page(myTable)', obj => { currentPage = obj.curr })
// 然后按钮里用 currentPage
这个细节最容易被忽略:没有主动维护的页码快照,就根本没有“当前页”这个值可取。


















