动态添加表单控件后必须调用 layui.form.render() 重新绑定,否则无法验证、取值和响应事件;需确保 html 结构含 layui 标准 class 和 lay-verify 属性,name 推荐用数组形式,删除时应清理 dom 及关联状态。

直接加 HTML 不生效,必须调用 layui.form.render() 重新绑定,否则新控件无法验证、取值、响应事件。
新增行后必须立刻 render,不能等用户操作完再调
只插入 DOM 而不调用 form.render(),新 input 或 select 看起来像输入框,实际点不了、选不了、提交时拿不到值。常见错误是 append 完就结束,漏掉这一步。
-
layui.form.render('select')单独渲染下拉框(如果新增了select) -
layui.form.render('checkbox')单独渲染复选框(如有) -
layui.form.render()兜底重绘全部表单元素(含验证、样式、禁用态) - 若动态行较多,建议按类型分批 render,避免卡顿;不要无脑全量调用
HTML 结构要带 layui 标准 class 和 lay-verify 属性
新插入的控件必须有 layui-input、layui-select 等 class,否则样式错乱;同时需带上 lay-verify(如 lay-verify="required"),否则校验逻辑不触发。
- name 属性建议用数组形式(如
name="phone[]"),方便后端接收多值 - 避免给新控件写死 id,容易重复;如需绑定事件,改用 class + 事件委托
- 如果用了
lay-filter(比如监听 select 变化),新select也得带上相同值
删除行时别只删 DOM,要清理关联状态
单纯 remove() 一行,可能残留事件监听、验证缓存或未清空的 name 属性,导致提交时传入空值或重复字段。
- 删除前用
$(this).closest('.layui-form-item').remove()确保整行移除 - 如果该行内有日期选择器(
laydate)、下拉搜索(lay-search),需先销毁实例再删 DOM - 提交前用
layui.form.val('filterName')获取数据,它会自动过滤掉已删除行的空值,但前提是 name 规则一致且没残留
最容易被忽略的是:新增行的 lay-verify 值和原有字段不一致,或者忘了给 select 加 lay-search 属性导致搜索失效——这些不会报错,但功能静默失败。











