一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

layui单选框如何禁止用户修改

时间:2026-08-23 12:49:49 编辑:袖梨 来源:一聚教程网

必须同时设置 disabled 属性和调用 form.render('radio') 才能真正禁用 Layui 单选框,因为原生 disabled 不影响 UI 层渲染与交互,需重绘同步状态。

直接给 input[type="radio"]disabled 属性,再调 form.render('radio') —— 其他方式基本都不可靠。

为什么不能只写 disabled 属性?

Layui 的 radio 是用 div.layui-form-radio 包裹原始 input 渲染的,原生 disabled 只作用于隐藏的 input,UI 层(比如圆圈、文字)仍可点击、视觉无灰显、状态也不锁死。必须触发重绘,让 Layui 读取并同步这个禁用态。

  1. 漏掉 form.render('radio'):用户点一下,看似没反应,但实际可能已触发 change 事件,甚至提交时还带值
  2. 用了 form.render() 不带参数:默认不处理 radio,等于白调
  3. layui.use('form', ...) 外执行:报 form is not defined

怎么写才真正禁止修改?

分静态和动态两种场景,核心都是两步:设属性 + 重绘。

  1. 初始化时禁用:HTML 中直接写 <input type="radio" name="type" value="1" disabled>,然后在 layui.use('form', function(){ form.render('radio'); }) 里补一次重绘
  2. 运行时禁用:用 jQuery 或原生 JS 设置 elem.disabled = true,紧接着调 form.render('radio');启用同理,设 false 后再 render
  3. 批量操作:如果页面有多个 radio 组,建议用选择器定位到具体组(如 form.render('radio', '#myForm')),避免全量重绘卡顿

常见失效原因和绕过点

禁用后用户仍能“改”?不是代码没生效,而是你没堵住所有入口:

  1. 键盘操作:Tab 进入后按空格,Layui 默认不限制 —— 解法是在 form.on('radio') 回调里加校验:if (elem.disabled) return;
  2. JS 动态赋值:用 form.val('formFilter', {type: '2'}) 仍能改值,disabled 不阻止 API 赋值;若需彻底锁死,得在赋值前检查 elem.disabled
  3. 表单提交:禁用的 radio 不会参与提交,但若你用 $('form').serialize() 手动序列化,它仍会把 disabled 的字段带上 —— 提交前应过滤:$('input[name="type"]:not(:disabled)')

最易被忽略的是:Layui 的禁用只是 UI 和交互层的遮蔽,它的内部状态管理、事件触发、API 赋值、甚至部分校验逻辑,都不自动感知 disabled —— 你得自己在每个可能的出口补判断。

热门栏目