一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

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

这是最常见场景:比如「是否启用」开关控制下游字段是否必填。核心不是改值,而是改完后触发重渲染。

  1. form.on('radio(name)', callback)form.on('checkbox', callback) 监听变化
  2. 目标 <input> 必须有 name 属性(Layui 验证只认 name,不看 id
  3. 通过 $elem.attr('lay-verify', 'required|number') 增加规则,或 $elem.removeAttr('lay-verify') 移除
  4. 必须紧接着调用 form.render('input') —— 写成 form.render() 会重载全部组件,可能重置 radio 选中状态
  5. 如果目标是隐藏域(type="hidden"),Layui 默认跳过校验,得改成 type="text" 并用 style="display:none"

动态添加的 input 怎么设为必填

用 JS 拼 HTML 插入后,Layui 不会自动识别新元素的 lay-verify,必须手动补 render。

  1. 插入 HTML 字符串时,确保含 namelay-verify="required"(例如:<input name="desc[]" lay-verify="required">
  2. 插入完成后立即执行 form.render('input'),否则提交时不校验
  3. 若新增的是 selectcheckbox,对应要 render 'select''checkbox'
  4. 避免在循环里反复调 form.render(),批量插入后再统一 render 一次更稳

用 form.verify 覆盖默认 required 提示(统一管理文案)

逐个写 lay-reqtext 维护成本高,且不支持运行时动态切换文案。注册全局 rule 更灵活。

  1. layui.use(['form'], ...) 里调用 form.verify({ required: function(value, item) { return value ? true : '此处必须填写'; } })
  2. 一旦注册了 required 规则,所有 lay-verify="required" 的字段都走这个函数,lay-reqtext 被忽略
  3. 函数内可读取 item.nameitem.getAttribute('data-context') 做差异化提示
  4. 注意:自定义 rule 只在提交时触发,不响应中间态变化(比如输入过程中实时校验需另配事件)

真正容易被忽略的是:所有动态操作都依赖 form.render() 的时机和粒度 —— 渲染太早(DOM 还没插入),或太晚(用户已点击提交),或类型错(该 render 'input' 却写了 'select'),都会让验证失效。

热门栏目