最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
layui表单如何获取所有输入项的值
时间:2026-08-24 12:10:47 编辑:袖梨 来源:一聚教程网
layui表单用form.val('formFilter')可一次性获取所有已绑定字段值,需确保form模块已加载、表单有lay-filter属性、各输入项有正确name;动态添加项需调用form.render()刷新映射表。
layui 表单怎么用 form.val() 一次性取值
直接调用 form.val('formFilter') 就能拿到整个表单所有已绑定字段的值,前提是表单有 lay-filter="formFilter",且每个输入项有正确的 name 属性。这是最常用也最稳妥的方式。
- 必须确保
form模块已加载:layui.use('form'),否则form.val是 undefined -
name是键名来源,没有name的输入框(比如纯展示的div或没写name的input)不会被采集 - 下拉框(
select)、复选框(checkbox)、单选框(radio)都支持,但多选checkbox的name必须带[]后缀(如hobby[]),否则只返回最后一个勾选项 - 如果表单里混用了非 layui 渲染的原生元素(比如手动插入的
input type="date"),它们不会被自动识别,除非你手动给它们加name并确保在表单 DOM 内
为什么 form.val() 有时返回空对象?
常见原因是表单未正确初始化或字段未被 layui 监听。layui 的 form.val() 不是单纯读 DOM,而是依赖其内部维护的字段映射表——这个表只在 form.render() 或页面加载时自动构建一次。
- 动态追加的表单项(比如 JS 插入的新
input)不会自动加入映射,需手动调用form.render('input')或form.render()刷新 - 如果用了
lay-ignore属性,该元素会被跳过,即使有name也不会进结果 - 表单容器没设
lay-filter,或传错参数(比如写成form.val('wrongFilter')),都会返回空对象{} - 注意:
form.val()只读取「当前渲染状态」,比如开关(switch)关闭时返回0,不是 DOM 的checked属性值
需要兼容未用 layui 渲染的原始 input 怎么办?
如果部分字段是原生写法、没走 layui 渲染流程,form.val() 拿不到它们。这时候得混合处理:先用 form.val() 取 layui 管理的部分,再用原生 DOM 查询补全。
- 推荐做法:统一用
document.querySelectorAll('#myForm [name]')遍历所有带name的控件,手动收集值,避开 layui 的限制 - 对
checkbox和radio要单独判断:el.type === 'checkbox' && el.checked,不然会把未勾选的也塞进去 - 注意
textarea和select的值获取方式不同,别直接用el.value——select多选要遍历options,textarea没问题 - 如果只是临时应急,不建议长期绕过
form.val(),因为会丢失 layui 对格式化、禁用态等的处理逻辑
取值后想提交,但后端收不到数组字段?
典型问题是多选 checkbox 的 name 没加 [],导致后端只收到一个字符串而非数组。layui 的 form.val() 严格按 name 解析,hobby 和 hobby[] 在结果里完全不一样。
-
name="hobby"→ 返回字符串(最后勾的那个) -
name="hobby[]"→ 返回数组(如["read", "swim"]) - 同理,
name="tags[0]"、name="tags[1]"这种写法form.val()不识别,它只认扁平name,不解析嵌套结构 - 如果后端要求嵌套 JSON,建议取完值后用 JS 手动组装,别依赖
name语法“骗过” layui
真正容易被忽略的是:表单重置(form.reset())后,form.val() 返回的仍是重置前的缓存值,不是实时 DOM 值。要拿最新状态,要么重新触发一次 form.val(),要么监听 submit 事件当场取。
相关文章
- 粉笔公考官网首页入口在哪 08-24
- 小米路由器放大器如何连接(小米路由器放大器连接方法) 08-24
- EDIUS如何建立4K工程预设 08-24
- 顺丰小哥如何申请物料 08-24
- 优酷如何清空观看记录 08-24
- 哪里下载Win7旗舰版官方安装包 08-24