Layui 表单控件默认不响应原生 checked 或 val() 赋值,必须通过数据驱动或渲染后干预:radio 需手动设 prop('checked', true) + form.render('radio');table radio 需 templet 判断字段值并输出 checked;select 的 value="0" 需先设 selected 属性再 render。
直接靠 checked 属性或 val() 赋值基本无效——Layui 会接管 DOM 并清掉原生状态,必须走它认可的数据驱动或渲染后干预路径。
后端返回的是数字(如 gender: 1)或字符串(如 status: "active"),不能直接写 checked 在 HTML 里,因为 Layui 初始化时会抹掉这个属性。
input[type="radio"] 都有明确的 name 和 value,比如:<input type="radio" name="gender" value="1" title="男">
prop('checked', true):$('input[name="gender"][value="' + data.gender + '"]').prop('checked', true)
form.render('radio'),否则 UI 不同步;如果用了 lay-filter,建议传第二个参数:form.render('radio', 'myFormFilter')
0,但 DOM 中 value 是字符串 "0",比较前最好统一转成字符串或用严格相等 ===
表格里的 radio 不是普通表单控件,Layui 会自动管理 click 逻辑,但默认不响应数据里的 checked 字段——必须在列定义里用 templet 函数输出带状态的标签。
type: 'radio',且整个 cols 中只能有一列是它templet 函数里判断字段值,比如后端返回 is_default: 1,就写:(d.is_default === 1 ? ' checked' : '')
value 必须有且唯一,通常用 d.id 或 d.row_id,别漏掉checked: true,Layui table 的 radio 模式不认这个字段;初始化默认选中只能靠提前塞 is_default: 1 进 data 数组这不是 JS 没执行,而是 Layui 渲染时主动跳过了 value="0" 和空字符串的 option——它把 "0" 当成了 falsy 值过滤掉。
$('#sel').val(0),得先手动设置 selected 属性:$('#sel').find('option[value="0"]').prop('selected', true)
form.render('select') 触发重绘;如果 select 有 lay-filter,建议传第二个参数避免全局刷新option 的 value 是带引号的字符串:<option value="0">未分类</option>,而不是 <option value=0>
append() 完成后再操作,否则 find('option[value="0"]') 找不到节点真正卡住人的从来不是“怎么写代码”,而是 value="0"、数字 0、字符串 "0"、undefined、空字符串在 HTML 解析、jQuery 匹配、Layui 渲染三层里被当成不同东西处理——每一层都得对齐类型和存在性。