必须同时设置 disabled 属性和调用 form.render('radio') 才能真正禁用 Layui 单选框,因为原生 disabled 不影响 UI 层渲染与交互,需重绘同步状态。
直接给 input[type="radio"] 加 disabled 属性,再调 form.render('radio') —— 其他方式基本都不可靠。
Layui 的 radio 是用 div.layui-form-radio 包裹原始 input 渲染的,原生 disabled 只作用于隐藏的 input,UI 层(比如圆圈、文字)仍可点击、视觉无灰显、状态也不锁死。必须触发重绘,让 Layui 读取并同步这个禁用态。
form.render('radio'):用户点一下,看似没反应,但实际可能已触发 change 事件,甚至提交时还带值form.render() 不带参数:默认不处理 radio,等于白调layui.use('form', ...) 外执行:报 form is not defined
分静态和动态两种场景,核心都是两步:设属性 + 重绘。
<input type="radio" name="type" value="1" disabled>,然后在 layui.use('form', function(){ form.render('radio'); }) 里补一次重绘elem.disabled = true,紧接着调 form.render('radio');启用同理,设 false 后再 renderform.render('radio', '#myForm')),避免全量重绘卡顿禁用后用户仍能“改”?不是代码没生效,而是你没堵住所有入口:
form.on('radio') 回调里加校验:if (elem.disabled) return;
form.val('formFilter', {type: '2'}) 仍能改值,disabled 不阻止 API 赋值;若需彻底锁死,得在赋值前检查 elem.disabled
$('form').serialize() 手动序列化,它仍会把 disabled 的字段带上 —— 提交前应过滤:$('input[name="type"]:not(:disabled)')
最易被忽略的是:Layui 的禁用只是 UI 和交互层的遮蔽,它的内部状态管理、事件触发、API 赋值、甚至部分校验逻辑,都不自动感知 disabled —— 你得自己在每个可能的出口补判断。