aria-readonly仅影响屏幕阅读器播报,不改变输入行为或表单提交;真正控制交互与数据流转的是readonly(文本类元素)或disabled(全控件禁用)。

aria-readonly 不影响实际行为,只改屏幕阅读器播报
aria-readonly 是 ARIA 属性,纯语义层标记,浏览器和表单提交逻辑完全无视它。它既不会阻止用户输入,也不会改变焦点、复制或提交行为——input 仍可编辑、可聚焦、值照常提交。唯一作用是告诉屏幕阅读器“这个字段当前是只读的”,比如读作“邮箱,只读,example@domain.com”。如果你没配 readonly 或 disabled,那 aria-readonly="true" 就只是个“善意的谎言”,前端行为不受控。
disabled 才真正锁死交互且剔除提交值
disabled 是原生 HTML 属性,生效即切断所有用户通道:无法聚焦、无法鼠标点击、无法键盘输入、无法选中复制;更关键的是,表单序列化时(new FormData(form)、form.submit()、form.serialize())会直接过滤掉该字段,后端收不到 name 和 value。哪怕你在 JS 里写了 el.value = 'abc',提交时依然为空。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
- 适用于:临时禁用按钮、协议未勾选时锁住提交、批量禁用
fieldset内所有控件 - 注意:
disabled对所有表单控件都有效,包括select、button、checkbox - 别和
readonly同时写——disabled优先级更高,readonly形同虚设
真正起效的只读必须用 readonly(且仅限文本类元素)
要让用户看到值、能复制、后端还能收到,唯一可靠方案是原生 readonly 属性,但只对 <input type="text">、<input type="password">、<input type="email">、<textarea></textarea> 生效。对 select、checkbox 加 readonly 浏览器直接忽略,等于白写。
- 常见翻车:给
<select readonly></select>写样式以为锁住了——实际下拉箭头仍可点,选项仍可切换 - 替代做法:
select只读需禁用所有<option disabled></option>,或换为<input readonly>文本模拟 - JS 动态控制时,用
el.removeAttribute('readonly')启用,比el.readOnly = false更兼容老版 Safari
React/Vue 中 readOnly 写法容易漏大小写和绑定逻辑
框架里属性名不是 readonly 而是 readOnly(驼峰),且必须按布尔值传,不是字符串:
- React 错误写法:
readonly={true}→ 渲染成readonly="true",浏览器当字符串存在即启用,但语义错乱 - React 正确写法:
readOnly={true} - Vue 错误写法:
:readonly="true"对select无效,因select不支持该属性 - UI 库如 Ant Design 的
Input绑定readOnly后,仍会提交值——但开发者常误以为它和disabled一样不传,上线才发现后端缺字段
aria-readonly 和 readonly 的责任边界:前者只服务辅助技术,后者才管真实交互与数据流转。混用或替用,轻则体验断裂,重则导致关键字段丢失。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










