必须清除 lay-verify 属性并立即调用 form.render();条件校验应使用 form.verify 自定义规则而非硬删属性;同时移除原生 required 属性,新增表单项后须执行 form.render()。
直接清空 lay-verify 属性但校验仍触发?
单纯用 $('#field').removeattr('lay-verify') 或 $('#field').attr('lay-verify', '') 会删掉属性,但 layui 的 form 模块在初始化时已缓存校验配置,后续提交仍按旧规则执行。
必须同步做两件事:
- 清除
lay-verify属性 - 立即调用
form.render()—— 不是form.verify(),也不是 submit 前才调
如果只改一个 input,且它在 .layui-form 容器内,form.render() 就够;含 select 或 checkbox 时可加参数如 form.render('select') 避免冗余刷新。
想条件性跳过校验,别硬删属性
比如“当 A 字段值为 ‘other’ 时,B 字段才必填”,硬删 lay-verify 会导致状态丢失、切换回来时无法恢复。
更稳妥的做法是用 form.verify 自定义规则并返回 true:
form.verify({
conditional_required: function(value, item) {
var typeVal = layui.$('[name="type"]').val();
if (typeVal !== 'custom') return true; // ✅ 跳过校验
if (!value) return '该字段在 custom 类型下为必填';
}
});
然后把目标字段改成 lay-verify="conditional_required"。这样既不破坏 DOM 结构,又支持反复切换。
浏览器原生 required 和 lay-verify 冲突
即使清掉了 lay-verify,若元素还带着原生 required 属性,submit 时仍会弹浏览器默认提示,和 Layui 提示打架。
务必一并处理:
$('#field').removeAttr('required')- 如果该字段已废弃,建议也清空
name:$('#field').attr('name', ''),避免后端收到空字符串 - 检查是否有
autocomplete="off"干扰聚焦行为(尤其 Chrome 120+)
动态增减行时,新增项校验失效?
新增的 input 即使写了 lay-verify="required",也不会被识别 —— Layui 不监听 DOM 变化。
关键动作只有两个:
- 拼完 HTML 插入后,立刻执行
form.render() - 删除行时,必须删整个
.layui-form-item,而不是只删按钮或 input;删完再调一次form.render()
如果新增项含 laydate 或 upload,还得先调对应实例的 destroy(),否则内存泄漏。
lay-verify 或增删节点后,没确认 form.render() 是否真执行了。控制台加个 console.log('form rendered') 比靠感觉靠谱得多。











