layui单选框无样式是因为form模块未加载或未正确渲染,需确保layui.use('form')执行、外层有layui-form类、动态添加时调用form.render('radio')并传入对应filter。

layui单选框没样式,大概率是 form 模块根本没加载
不是代码写错了,而是 layui.use('form', ...) 这一步压根没执行,或者执行时机不对。Layui 的 input[type="radio"] 默认被 layui.css 设为 display: none,全靠 form 模块接管后生成美化层(.layui-form-radio)才可见。
- 检查 JS 是否漏写了
layui.use('form', function(){...}),只引入了 layui.js 但没调用form模块,单选框就永远是“隐形”的 - 确认
layui.js加载成功,控制台没有Uncaught ReferenceError: layui is not defined - 别删
lay/modules/目录——有人为“精简”手动删掉它,结果form模块加载失败,单选框直接消失 - 确保外层容器有
class="layui-form",否则form模块不识别这是它的作用域
动态插入的单选框,必须手动 form.render('radio')
页面初始 HTML 里写的单选框,只要 form 加载成功就会自动渲染;但 JS 动态拼接、innerHTML 注入或 AJAX 返回后追加的单选框,form 不会监听 DOM 变化,必须人工触发重绘。
- 不要等 DOM 插入完就以为完事了,紧接着就得调
form.render('radio') - 如果该单选框在某个特定
form容器内(比如lay-filter="userForm"),推荐传第二个参数:form.render('radio', 'userForm'),避免影响其它表单 - 别写成
form.render('radios')或form.render()(无参),前者参数名错,后者可能因范围过大导致性能抖动或样式冲突 - 若同时插入了
select和radio,分开调两次更稳妥:form.render('select', 'xxx')和form.render('radio', 'xxx')
默认选中项不生效?checked 属性只是起点,不是终点
checked 属性能让原生 radio 选中,但 Layui 的美化层不认这个——它只读取渲染后的状态。光写 checked 不够,必须让 form 模块知道并同步到 UI。
- 静态写法:HTML 中加
checked,然后确保后续执行了form.render('radio'),否则圆点不会高亮 - 动态写法:JS 设置
document.querySelector('input[value="xxx"]').checked = true后,必须紧跟form.render('radio'),否则 UI 不更新 - 别用
$('input[name="sex"]').val('男')去设值——form.val()只对select和input有效,对radio无效 - 如果单选框在弹窗里(比如 layer.open 弹出的表单),注意弹窗 DOM 是异步插入的,
form.render()必须放在success回调或layer.ready()之后
样式错乱或点击无响应,先看 type 和 name 是否一致
Layui 把同名 name 的 radio 当作一组来管理,且依赖 type="radio" 的标准写法。任何偏差都会导致渲染中断或事件失效。
- 所有同组 radio 的
name值必须完全相同(区分大小写),否则 Layui 认为它们是独立控件,不会互斥 - 确保没手写
<input type="radio">在templet里——表格列中用type: 'radio',别自己画 input,否则lay-checked属性会被清空 - 检查是否误用了
disabled:加了disabled的 radio,Layui 美化层会灰掉且不可点击,但原生checked属性仍存在,容易误判为“没生效” - 浏览器调试时,右键审查元素,确认真实 DOM 里
input上还有checked,而旁边.layui-form-radio元素是否存在——不存在说明form.render()根本没跑,存在但没高亮说明状态没同步
form.render('radio'),就等于把单选框交给浏览器原生处理——而原生 radio 在 layui.css 下是隐身的。


















