layui单选框提交值为空的主因是name不一致、value为空字符串或未调用form.render('radio');需确保同组radio的name完全相同、value为非空字符串,且动态添加后立即执行form.render('radio')。

layui 单选框提交后台值为空,基本就是 name 没对上、value 是空字符串、或没触发 form.render() —— 三者占九成以上。
radio 的 name 属性必须完全一致
哪怕一个空格、大小写差一点,Layui 就当它们是不同字段,data.field 里直接不收这组值。
- 检查所有同组
input[type="radio"]的name是否完全相同,比如统一用sex,不能混用Sex、user_sex或带空格的sex - 动态插入 radio 后,
name必须在 DOM 初始渲染时就存在;JS 后续用.attr('name', '...')补不会被识别 - 打开浏览器开发者工具,右键 inspect 元素,确认真实
name值(不是你代码里写的,是最终渲染出来的)
value 不能是空字符串
Layui 把 value="" 当作“未选中”,哪怕用户点过它,提交时 data.field 里也不会出现这个 key。
- 每个
radio的value必须是非空字符串,例如value="male"、value="1"、value="on" - 避免
value=""、value=" "(含空格)、或模板里漏写 value 导致默认为空 - 后端接收逻辑也要按非空
value解析,别假设""等价于某个业务状态
动态生成后必须调用 form.render('radio')
页面加载完才加的 radio,或者 AJAX 回来后拼的 HTML,Layui 不会自动接管,得手动告诉它:“这里有新单选框”。
- 插入 DOM 后立即执行
form.render('radio'),参数必须是字符串'radio',不是'checkbox'或空字符串 - 如果用了
form.render()全量重绘,也行,但效率低;明确指定类型更稳 - 确保
form实例已初始化:layui.use('form', function(){ var form = layui.form; }),否则form.render是 undefined
提交时 data.field 里压根没这个字段?先看是不是漏了 name
这是最常被忽略的一环:Layui 只认 name,不认 id 或其他属性。哪怕你用 jQuery 给元素设了值,没 name 就等于不存在。
- 检查表单里所有
radio标签是否都带name,且值一致 - 别把
name写成id(常见手误),例如<input type="radio" id="sex1">→ 缺name,必然为空 - 用
console.log(data.field)打印出来,一眼就能看出字段名对不对、有没有缺失
真正卡住人的地方,从来不是“怎么写”,而是 name 和 value 这两个最基础的属性,在 HTML 渲染、JS 注入、Layui 解析三层里悄悄变形了——比如后端返回数字 0,你写成 value=0(没引号),浏览器解析成空字符串,Layui 就当它没值。











