静态页面直接写checked属性即可;动态场景必须用form.val()配合form.render('radio')更新UI,否则layui视觉状态与DOM值分离导致不生效。

直接在 HTML 里写 checked 属性只对纯静态页面有效;动态场景下必须用 form.val() 配合 form.render('radio'),否则 UI 不会更新。
静态页面直接写 checked 就够了
如果表单不经过 JS 初始化、不调用 form.render(),且 radio 是初始就存在的 DOM 元素,那么写 checked 是最简方式:
<input type="radio" name="sex" value="1" title="男" checked> <input type="radio" name="sex" value="2" title="女">
- 注意:
checked是布尔属性,写checked或checked=""都行,但别写checked="false" - 多个同名 radio 中只能有一个带
checked,否则语义错误 - 这种写法在 layui 加载后会被覆盖——只要执行过
form.render('radio'),所有checked属性都会被忽略
动态设置必须用 form.val() + form.render()
从后端取值、编辑页回显、AJAX 加载后赋值等场景,唯一可靠路径是:
- 先用
$("#myRadio").val("1")设置原生<input>的value - 再立刻调
form.render('radio')让 layui 同步渲染 UI - 如果 radio 有
lay-filter="myFilter",推荐传第二个参数:form.render('radio', 'myFilter'),避免重绘整个表单
常见错误:只写 $("#myRadio").val("1") 就以为完事了,结果界面上没变化——因为 layui 的视觉状态和 DOM 值是分离的。
表格里的 radio 默认选中要走 done 回调
Layui 表格(layui.table)的 type: 'radio' 列不支持靠数据字段(如 is_checked: true)驱动默认选中,必须在渲染完成后手动触发:
- 在
table.render()的done回调里操作,不能放在success或complete - 用
table.setRowChecked('filterId', {index: 0, checked: true}),其中index是当前页的行下标(从 0 开始) - 或者更稳妥:查
table.cache['filterId']找到目标行对象,手动加lay-checked="true"属性,再调table.checkStatus('filterId')强刷状态
别试图在原始 data 数组里塞 checked: true 字段——radio 模式下 layui 完全不读这个。
容易被忽略的关键点
radio 的 name 必须完全一致,否则无法互斥;Layui 2.8+ 对 lay-skin="primary" 的样式兼容性较差,若发现点击无反馈,先去掉这个属性试试。动态插入或修改 radio 后,一定要重新调 form.render('radio'),哪怕只是改了个 title —— 否则新内容不会被 layui 管理,事件也不绑定。


















