渐进式编程课
HTML5 目录
第 20 课2026.09.28

无效提交时,把时长输入框与页面内的具体错误文字关联。

第 20 课:关联输入错误详情

  • 日期:2026-09-28
  • 课程序号:第 20 课
  • 知识点:aria-errormessage

用途或适用场景

无效提交时,把时长输入框与页面内的具体错误文字关联。

核心概念

aria-errormessage 必须与 aria-invalid 配合;错误有效时消息可见,恢复编辑时移除关联并隐藏消息。

最小代码或操作示例

html
<form id="lessonForm" novalidate>
  <label for="minutes">练习分钟数</label>
  <input id="minutes" name="minutes" type="number" min="1" required aria-describedby="minutes-help">
  <p id="minutes-help">请输入至少 1 分钟。</p>
  <p id="minutes-error" hidden>提交失败:练习时长必须至少为 1 分钟。</p>
  <button type="submit">提交</button>
</form>
<script>
const form = document.querySelector('#lessonForm');
const input = document.querySelector('#minutes');
const error = document.querySelector('#minutes-error');
form.addEventListener('submit', event => {
  if (!form.reportValidity()) {
    input.setAttribute('aria-invalid', 'true');
    input.setAttribute('aria-errormessage', 'minutes-error');
    error.hidden = false;
    event.preventDefault();
  }
});
input.addEventListener('input', () => {
  input.removeAttribute('aria-invalid');
  input.removeAttribute('aria-errormessage');
  error.hidden = true;
});
</script>

3~5 分钟练习

输入 0 提交,再改为 5;检查错误文字和 aria-errormessage 的变化。

参考答案

无效提交后错误文字可见且属性值为 minutes-error;重新输入后错误文字隐藏,关联被移除。范围说明仍由 aria-describedby 关联。

与上一课的联系

沿用第 19 课的 lessonForm、minutes、reportValidity() 与 aria-invalid;本课只新增错误详情及其 aria-errormessage 关联;下一课可以在有效提交后向页面追加练习记录。

时效校验

时效校验:2026-09-28(已打开 W3C WAI-ARIA 1.2 的 aria-errormessage/aria-invalid 规范与 WHATWG 约束校验文档;未见废弃标记)。

官方参考