layui表格分页下拉菜单由page.limits严格控制,必须是长度≥2的纯数字数组(如[10,20,50]),否则fallback默认值;page.limit必须是其中一项,且需与request.limitName对齐后端参数名,动态修改limits须destroy后重新render。

page.limits 数组必须显式声明为数字数组
layui 表格的分页下拉菜单选项完全由 page.limits 控制,不是 request.limit,也不是单独的 limit 字段。它必须是长度 ≥ 2 的纯数字数组,例如 [10, 20, 50];写成字符串数组(如 ["10", "20"])、null、undefined 或直接省略,都会 fallback 到默认的 [10, 20, 30, 40, 50]。
常见错误包括:
-
limits: [10]→ 渲染一个带箭头但无法点击的输入框(视觉残留,非真实下拉) -
limits: []→ 才真正隐藏下拉框 -
limits: [5, "10", 20]→ 混入字符串导致整个数组被忽略
limit 值必须在 limits 数组中存在
page.limit 决定初始选中项,但它**必须是 page.limits 中的某个值**,否则 layui 会静默 fallback 到 limits[0],且下拉菜单无法回显当前值,页码文案也可能错乱。
例如配置了 limits: [8, 16, 32],却设 limit: 15,初始化后实际生效的是 8,但 UI 不报错也不提示。
同时注意:limit 必须是正整数,不能是小数或字符串;且必须放在 page 对象内,不能和 elem、url 并列书写。
后端参数名不匹配会导致请求发错但 UI 正常
如果后端接口接收的分页参数名不是 limit(比如叫 pageSize),仅改 page.limits 和 page.limit 是不够的,必须同步配 request: { limitName: 'pageSize' }。
否则请求发出的仍是 limit=20,而服务端收不到,返回空数据或 400 错误——但前端分页器 UI 完全正常,极难排查。
这个三元关系必须对齐:
-
page.limits→ 控制「能选什么」 -
page.limit→ 决定「当前选哪个」 -
request.limitName→ 决定「后端能不能收到」
动态改 limits 必须销毁重建,reload 无效
table.reload() 传新 limits 完全不生效:DOM 不更新、内部状态不同步、点击新选项可能发旧值甚至无响应。
正确做法是:
- 先调
table.destroy('demo')(参数必须是表格容器的id或lay-id) - 清空容器内非表格 DOM(如自定义按钮、提示文字),避免样式干扰
- 用完整新配置重新
table.render(),漏掉cols、url、request中任一项都会导致表格空白 - 若原表格有排序、搜索等状态,需手动保存并在新 render 中还原
移动端建议控制 limits 选项在 3–4 个以内(如 [10, 20, 50]),太多易导致下拉弹层溢出视口,用户点不到最末项。


















