aria-invalid的核心作用是向辅助技术明确标识输入字段的无效状态;它仅作状态标记,必须配合aria-errormessage指向唯一ID的错误提示元素,且需同步JavaScript动态管理真假值与ID关联。

aria-invalid 本身不触发错误提示,只是个状态标记
很多人以为给 input 加上 aria-invalid="true" 就能自动弹出错误信息——不会。它只是告诉辅助技术“这个字段当前无效”,但不关联任何文案、不显示、不聚焦、也不影响 DOM 渲染。真正让错误文案被读出来、被关联起来的,是 aria-errormessage 和对应元素的 id。
必须用 id 关联 aria-errormessage 和错误文案元素
aria-errormessage 的值不是随便写的文字,而必须是页面中某个元素的 id。这个元素通常是个 div 或 p,里面放具体错误文本。浏览器和读屏软件靠这个 id 建立“输入框 → 错误文案”的可访问性链接。
常见错误写法:<input aria-invalid="true" aria-errormessage="Please enter a valid email">(❌ 错:值不是 id)
正确写法示例:
<label for="email">Email</label> <input id="email" aria-invalid="true" aria-errormessage="email-error"><p id="email-error" class="error-text">请输入有效的邮箱地址</p>
-
aria-errormessage的值"email-error"必须和错误文案元素的id完全一致(包括大小写和连字符) - 错误文案元素建议用
p或div,不要用span(部分读屏对 inline 元素支持不稳定) - 该元素应紧邻表单控件之后或通过视觉样式明确归属,否则即使可访问,用户也难定位
aria-invalid 的三种值会影响读屏行为
aria-invalid 不是布尔值,它有三个合法取值:"false"、"true"、"grammar"(或 "spelling")。不同值会触发读屏软件不同的播报语气或提示词。
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
-
aria-invalid="true":通用错误,读屏常读作“无效”或“错误” -
aria-invalid="grammar":用于拼写/语法类校验(如富文本编辑器),部分读屏会读“语法错误” -
aria-invalid="false":显式声明有效,比不设更可靠;避免依赖 JS 动态移除属性带来的可访问性空窗期 - 别用
aria-invalid="undefined"或空字符串——它们不合法,会被忽略
配合 JavaScript 更新时,要同步操作两个属性
动态验证场景下,光改 input 的 value 不够,必须同时更新 aria-invalid 和 aria-errormessage(或清空它),否则读屏仍会播报旧错误或漏报新错误。
例如邮箱校验失败后:
input.setAttribute('aria-invalid', 'true');
input.setAttribute('aria-errormessage', 'email-error');
校验通过后必须清理:
input.setAttribute('aria-invalid', 'false');
input.removeAttribute('aria-errormessage');
- 不要只删
aria-errormessage而留着aria-invalid="true"——这会让读屏说“无效”,却找不到错误文案 - 错误文案元素本身也要控制显示/隐藏(用
hidden或 CSS),否则视觉上残留错误提示,但可访问性链路已断开 - 若错误文案是动态生成的(比如从后端返回),确保它的
id在插入 DOM 后稳定存在,且在aria-errormessage引用前已挂载
实际中最容易被忽略的是:错误文案元素没加 id,或者 aria-errormessage 拼错 id,又或者验证通过后忘记把 aria-invalid 设回 false——这三个点一出,整个 ARIA 错误流就失效了。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










