最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
layui表单如何动态设置必填项
时间:2026-08-22 12:33:49 编辑:袖梨 来源:一聚教程网
动态设置必填项需监听radio/checkbox变化后修改lay-verify属性并调用form.render('input')重渲染,新增元素须含name和lay-verify且插入后立即render,自定义验证提示应通过form.verify统一注册。
动态设置必填项不能靠改 required 属性或直接写死 lay-verify="required" —— Layui 初始化后就固化了验证规则,后续 DOM 属性变更不会自动生效。
监听 radio/checkbox 变化并切换 lay-verify
这是最常见场景:比如「是否启用」开关控制下游字段是否必填。核心不是改值,而是改完后触发重渲染。
- 用
form.on('radio(name)', callback)或form.on('checkbox', callback)监听变化 - 目标
<input>必须有name属性(Layui 验证只认name,不看id) - 通过
$elem.attr('lay-verify', 'required|number')增加规则,或$elem.removeAttr('lay-verify')移除 - 必须紧接着调用
form.render('input')—— 写成form.render()会重载全部组件,可能重置 radio 选中状态 - 如果目标是隐藏域(
type="hidden"),Layui 默认跳过校验,得改成type="text"并用style="display:none"
动态添加的 input 怎么设为必填
用 JS 拼 HTML 插入后,Layui 不会自动识别新元素的 lay-verify,必须手动补 render。
- 插入 HTML 字符串时,确保含
name和lay-verify="required"(例如:<input name="desc[]" lay-verify="required">) - 插入完成后立即执行
form.render('input'),否则提交时不校验 - 若新增的是
select或checkbox,对应要 render'select'或'checkbox' - 避免在循环里反复调
form.render(),批量插入后再统一 render 一次更稳
用 form.verify 覆盖默认 required 提示(统一管理文案)
逐个写 lay-reqtext 维护成本高,且不支持运行时动态切换文案。注册全局 rule 更灵活。
- 在
layui.use(['form'], ...)里调用form.verify({ required: function(value, item) { return value ? true : '此处必须填写'; } }) - 一旦注册了
required规则,所有lay-verify="required"的字段都走这个函数,lay-reqtext被忽略 - 函数内可读取
item.name或item.getAttribute('data-context')做差异化提示 - 注意:自定义 rule 只在提交时触发,不响应中间态变化(比如输入过程中实时校验需另配事件)
真正容易被忽略的是:所有动态操作都依赖 form.render() 的时机和粒度 —— 渲染太早(DOM 还没插入),或太晚(用户已点击提交),或类型错(该 render 'input' 却写了 'select'),都会让验证失效。