Layui表格分页limit必须嵌套在page对象中且为正整数,limits数组仅控制下拉选项并需满足长度≥2、纯数字等约束,后端参数不匹配需通过request映射,动态修改应使用table.reload()而非destroy重建。
page.limit 必须显式设为正整数,不能省略或写成字符串
layui 表格默认每页显示 30 条,想改成自定义值(比如 15),必须在 page 对象里明确写 limit: 15。只配 limits: [10, 20, 50] 不起作用——那只是下拉菜单选项,不决定首次加载条数。
常见错误包括:
-
limit: "15"(字符串)→ Layui 当作无效值,回退到默认30 -
page: true简写 →limit不生效,始终用30 - 把
limit写在顶层配置(如{ limit: 15, url: '...' })→ 被忽略,必须嵌套在page对象内
正确写法:page: { limit: 15 },且 limit 值需是正整数。
limits 数组控制下拉选项,长度和类型必须严格满足条件
page.limits 是唯一影响分页下拉菜单渲染的配置,但它不参与数据加载逻辑。
关键约束:
- 必须是纯数字数组,如
[5, 10, 20, 50];["10", "20"]或[10, null, 50]会被整个忽略,回退到默认[10, 20, 30, 40, 50] - 长度必须 ≥ 2 才渲染可展开下拉框;
[10]会生成一个带箭头但无法点击的假输入框;只有limits: []才彻底隐藏 -
page.limit的值必须出现在limits数组中,否则 UI 自动 fallback 到第一个值,且不报错
移动端慎用过多选项,limits 超过 4 个容易导致弹层被视口截断。
后端参数名不匹配会导致 limit 值发错但界面无异常
前端设了 limit: 20,但表格数据没变——大概率是后端没收到这个值。
Layui 默认请求参数是 ?page=1&limit=20,而 Spring Boot、ThinkPHP、Django 等常收 pageSize、list_rows、per_page 等字段。
必须用 request 映射:
-
request: { limitName: 'pageSize' }→ 发出?page=1&pageSize=20 - 如果页码参数也不同,一并映射:
request: { pageName: 'currentPage', limitName: 'pageSize' } - 打开浏览器 Network 面板,直接检查 URL 参数名是否与后端接口一致,这是最可靠的验证方式
动态改 limit 要用 table.reload(),别 destroy + render
用户点击按钮切换“每页 100 条”,不要调 table.destroy() 再重新 render()——这会丢失当前页码、排序状态、工具栏事件绑定,甚至引发 DOM 重复。
正确做法是:
- 调用
table.reload('id', { page: { limit: 100 } }),它保留全部初始配置,只更新传入部分 - 如果希望切完条数后回到第一页,加
curr: 1:page: { limit: 100, curr: 1 } -
reload()不会自动读取下拉框当前选中值,需手动从 DOM 取或维护变量再传入
注意:table.reload() 对 limits 数组无效,运行时无法替换下拉选项——要改 limits,只能销毁重建,但代价高,应尽量避免。









