속성 · 관계
aria-errormessage
입력값이 잘못되었을 때 보여 주는 오류 메시지 요소를 ID로 연결합니다. 반드시 aria-invalid와 함께 씁니다.
한눈에 보기
- 구분
- 속성 (Property)
- 분류
- 관계
- 값 형식
- ID 참조 (ID reference)
- 기본값
없음- 적용 범위
- 특정 역할에만 사용
- HTML 대체
- 없음 (브라우저 기본 제약 검증 말풍선은 별도로 동작하며 모양·문구를 제어하기 어렵습니다)
설명
aria-errormessage는 입력 요소와 그 오류 메시지를 연결합니다. 사용자가 잘못된 값을 입력해 aria-invalid가 true가 되면, 보조기술은 연결된 요소의 내용을 "이 입력의 오류 메시지"로 안내합니다.
명세 규칙이 엄격합니다. 반드시 aria-invalid와 함께 써야 하며, 브라우저는 aria-invalid="false"이거나 속성이 없으면 aria-errormessage를 노출하지 않습니다. 값이 올바른 동안에는 오류 메시지 요소를 숨기거나 aria-errormessage를 제거하고, 오류가 생기면 메시지를 화면에 보이게 해야 합니다. 새로 나타난 오류를 즉시 알리고 싶다면 메시지를 라이브 리전(aria-live, alert) 안에 넣습니다.
ARIA 1.2에서 이 속성은 전역 속성이 아닙니다. textbox, searchbox, combobox, checkbox, switch, radiogroup, listbox, slider, spinbutton, gridcell, tree, application 등 값을 입력·선택하는 역할에 씁니다. 네이티브 <input>, <select>, <textarea>도 해당 역할을 가지므로 사용할 수 있습니다.
보조기술 지원은 꾸준히 개선되었지만 여전히 고르지 않습니다. 최신 JAWS와 NVDA는 Chrome·Edge·Firefox에서 오류 메시지를 읽지만, 버전이나 브라우저·모바일 화면낭독기 조합에 따라 읽지 않는 경우가 있습니다. 그래서 실무에서는 오류 메시지를 aria-describedby에도 함께 연결하는 방법이 널리 쓰입니다(이 경우 같은 문장이 두 번 읽힐 수 있으니 실제 환경에서 들어 보고 결정합니다).
검수할 때는 오류가 났을 때 aria-invalid="true"로 바뀌는지, 메시지가 보이고 내용이 구체적인지(무엇이 틀렸고 어떻게 고치는지), 오류를 고치면 aria-invalid와 메시지가 함께 정리되는지, 오류 메시지가 색만으로 구분되지 않는지 확인합니다. WCAG 3.3.1 오류 식별, 3.3.3 오류 수정 제안과 관련됩니다.
값
| 값 | 의미 |
|---|---|
<ID> | 오류 메시지를 담은 요소의 ID입니다. aria-invalid="true"일 때만 의미가 있으며, 그때 메시지는 화면에 보여야 합니다. |
사용 예
오류 전 / 오류 후
<!-- 값이 올바른 상태: 메시지는 숨김 -->
<label for="email">이메일</label>
<input id="email" type="email" aria-invalid="false" aria-errormessage="email-err">
<p id="email-err" class="error" hidden></p>
<!-- 잘못된 값을 입력한 뒤 -->
<input id="email" type="email" aria-invalid="true" aria-errormessage="email-err">
<p id="email-err" class="error">이메일 형식이 올바르지 않습니다. 예: [email protected]</p>검사하고 상태 바꾸기
function validate(input, msg) {
const ok = input.validity.valid && input.value.trim() !== '';
input.setAttribute('aria-invalid', String(!ok));
msg.textContent = ok ? '' : '이메일 형식이 올바르지 않습니다. 예: [email protected]';
msg.hidden = ok;
return ok;
}
form.addEventListener('submit', (e) => {
if (!validate(email, emailErr)) { e.preventDefault(); email.focus(); }
});aria-invalid 없이 사용
<!-- 비권장: aria-invalid가 없어 오류 메시지가 노출되지 않고, 메시지가 늘 보임 -->
<input id="phone" aria-errormessage="phone-err">
<p id="phone-err">숫자만 입력하세요.</p>지원 범위를 넓히는 조합
<input id="email" type="email" aria-invalid="true"
aria-errormessage="email-err" aria-describedby="email-hint email-err">
<p id="email-hint">회사 이메일을 입력합니다.</p>
<p id="email-err">이메일 형식이 올바르지 않습니다.</p>aria-errormessage를 지원하지 않는 환경에서도 설명으로 오류가 읽힙니다. 지원하는 환경에서는 중복으로 읽힐 수 있습니다.
직접 해 보기
이메일을 잘못 입력하고 "확인"을 누르거나 입력 상자를 벗어나 보세요. aria-invalid가 바뀌고 aria-errormessage가 가리키는 메시지가 나타납니다.
실시간 코드 — 조작하면 속성 값이 바뀌는 모습을 볼 수 있습니다
화면낭독기에서는
| 상황 | 들리는 안내 (예) |
|---|---|
| 오류가 없는 입력 상자에 포커스 | 이메일, 필수, 편집 창, 입력하려면 문자를 입력하세요 |
| 잘못된 값으로 "확인"을 누름 | 이메일 형식이 올바르지 않습니다. 예: [email protected] (라이브 리전 안내) |
| 오류 상태의 입력 상자에 다시 포커스 | 이메일, 필수, 잘못된 입력, 편집 창, 오류: 이메일 형식이 올바르지 않습니다. |
사용 지침
이렇게 쓰세요
- 항상
aria-invalid와 함께 쓰고, 오류일 때만true로 바꿉니다. - 오류가 있을 때 메시지를 화면에 보이게 하고, 무엇이 틀렸고 어떻게 고치는지 구체적으로 적습니다.
- 새로 나타난 오류는 라이브 리전이나 포커스 이동으로 알립니다.
- 오류를 고치면
aria-invalid를 되돌리고 메시지를 숨깁니다.
이렇게 쓰지 마세요
aria-invalid없이aria-errormessage만 넣지 않습니다.- 값이 올바른데도 오류 메시지를 보이게 두지 않습니다.
- 입력하기도 전에(첫 포커스 시) 오류를 표시하지 않습니다.
- 오류를 빨간색 테두리만으로 표시하지 않습니다. 텍스트 메시지가 필요합니다.
사용할 수 있는 역할
관련 속성·패턴
이 속성을 쓰는 패턴