Layui的edit编辑模式不支持内置min属性校验,需用templet自定义input并绑定lay-event事件控制;因edit:"number"仅改type类型,未监听事件或校验,原生min在动态DOM中失效。
layui table edit 输入框怎么限制最小值
直接说结论:layui 的 edit 编辑模式本身不支持内置的 min 属性或数值范围校验,必须手动绑定事件或改用自定义模板 + lay-event 控制。
为什么原生 edit="number" 不生效
Layui 2.8.x 及之前版本中,edit: "number" 仅触发浏览器原生 number 类型输入框,但 Layui 并未监听其 input 或 change 事件做拦截;表单提交时也不校验,用户仍可输入小于 0 的值(比如 -100)、甚至清空后回车提交空字符串。
- 浏览器原生
min属性在 Layui 动态插入的编辑单元格里通常被忽略(DOM 是 later 插入,非初始渲染) -
edit: "number"实际只影响 input 的type,不附加任何约束逻辑 - 服务端收到非法值后才发现问题,属于典型的前端防御缺失
正确做法:用 templet + event 自行控制
放弃 edit 字段配置,改用 templet 渲染带约束的 input,并通过 lay-event 拦截编辑行为。这是目前最稳定、兼容性最好的方案。
- 在列定义中去掉
edit,加上templet和event:
{field: 'price', title: '价格', templet: '<div><input type="number" min="0" step="0.01" value="{{d.price}}"></div>', event: 'edit_price'}
table.on('tool(...) 中处理:table.on('tool(test)', function(obj){
if(obj.event === 'edit_price'){
const input = obj.tr.find('input[type="number"]');
const val = parseFloat(input.val());
if (isNaN(val) || val
obj.tr.find() 定位当前行 input,不能用全局 $('input'),否则会误操作其他行容易被忽略的细节
很多人卡在「改了 input 却没更新表格数据」——因为 Layui 不会自动把 input 值同步回 d 对象。你得手动调用 obj.update()。
- 校验通过后,一定要执行:
obj.update({price: val}); - 如果字段是整数,记得用
Math.round(val)避免小数残留 - 移动端 iOS Safari 对
type="number"支持不稳定,建议加pattern="[0-9]*"和inputmode="numeric"提升体验 - 不要依赖
onblur或onchange,Layui 编辑流程是 click → focus → enter/blur → 提交,时机要卡在tool事件里











