layui 的 form.val() 只更新数据缓存,不自动同步 dom,必须调用 form.render() 并指定类型(如 'select')才能刷新界面;动态插入的表单需确保 dom 就绪后再渲染,且 lay-filter 值、option value、checkbox value 类型等须严格匹配。

form.val() 赋值后表单没更新,是不是没触发渲染?
不是“赋值失败”,而是 form.val() 本身只操作数据对象,不自动同步到 DOM。Layui 的表单元素(比如 select、checkbox、radio)在初始化后,DOM 状态和内部缓存是分离的;直接调用 form.val() 只改了缓存值,界面不会重绘。
- 必须手动触发
form.render(),且要指定类型(如'select'、'checkbox'),否则默认只渲染input和textarea - 如果表单是动态插入的(比如弹窗里用
layui.layer.open加载的),需确保form.render()在 DOM 插入完成后再执行 -
form.val('filter', {...})的filter必须和form元素的lay-filter值完全一致,大小写、空格都不能错
select 下拉框赋值后仍显示空白或首项?
这是最典型的场景:你传了正确的 value,但下拉框没变。根本原因是 select 的 option 元素还没被 Layui 解析成带 lay-value 的结构,或者你赋的 value 在当前 option 中根本不存在。
- 检查 HTML 中
select是否已加lay-ignore—— 加了就跳过解析,form.val()无效 - 确认
option的value属性值与你传给form.val()的值严格相等(字符串匹配,注意数字1和字符串"1"不等) - 若
option是 JS 动态追加的,必须在追加后立刻调用form.render('select'),不能等form.val()之后再补
checkbox/radio 赋值后勾选状态不生效?
这类控件依赖 name + value 组合匹配,且 Layui 会把原始 input[type=checkbox] 隐藏,用伪元素模拟 UI。赋值失效往往卡在匹配逻辑上。
- 确保所有同名
checkbox都在同一个form容器内,且容器有lay-filter - 传给
form.val()的值必须是数组(即使只选一个),例如:{'agree': ['on']}或{'hobby': ['read', 'swim']} - 如果 checkbox 的
value是数字(如value="1"),而你传的是1(number 类型),Layui 内部用===比较,会不匹配 —— 改成字符串"1"
form.render() 执行了但还是没反应?查这三处
常见排查盲区,不是代码写错,而是环境或时机问题。
- 是否在
layui.use(['form'], callback)的回调里操作?在外面调用form模块会是undefined - 是否重复执行了
form.render()?比如在success回调里又调了一次,覆盖了前一次效果 - 浏览器控制台有没有报错?比如
Cannot read property 'val' of undefined—— 说明form模块没正确加载,或layui全局变量被覆盖











