상태 · 위젯 상태
aria-invalid
입력한 값이 요구 형식에 맞지 않음을 알립니다. 오류 메시지와 함께 씁니다.
한눈에 보기
- 구분
- 상태 (State)
- 분류
- 위젯 상태
- 값 형식
- 토큰 (true / false / grammar / spelling)
- 기본값
false- 적용 범위
- 특정 역할에만 사용
- HTML 대체
required·pattern·type="email"등 HTML 제약 검증의:invalid상태 (브라우저 기본 오류 말풍선 사용 시)
설명
aria-invalid는 입력 요소의 값이 유효성 검사를 통과하지 못했음을 알립니다. 화면낭독기는 필드에 포커스가 갈 때 “잘못된 입력”처럼 읽어, 사용자가 어떤 필드를 고쳐야 하는지 알 수 있게 합니다. 시각적으로 빨간 테두리로만 오류를 표시하면 색을 구분하기 어려운 사용자와 화면낭독기 사용자는 오류를 알 수 없으므로(WCAG 3.3.1 오류 식별), 이 속성과 텍스트 오류 메시지를 함께 제공해야 합니다.
오류 메시지 자체는 aria-describedby(또는 aria-errormessage)로 필드에 연결합니다. 이 속성은 “틀렸다”는 사실만 알리고, “무엇이 왜 틀렸는지”는 메시지가 전달합니다. 제출 버튼을 눌렀을 때 오류가 여러 개라면 첫 번째 오류 필드로 포커스를 옮기거나 오류 요약을 보여 주는 것이 좋습니다.
언제 true로 바꿀지가 중요합니다. 사용자가 아직 입력하지 않은 빈 필수 항목을 페이지 로드 시점부터 true로 표시하면 안 됩니다. 보통 제출 시점이나 필드를 떠날 때(blur) 검사해 설정하고, 사용자가 값을 고쳐 유효해지면 즉시 제거하거나 false로 바꿉니다. grammar와 spelling은 문법·맞춤법 오류를 감지하는 편집기용 값이며, 지원하는 화면낭독기가 많지 않습니다.
전역 사용은 ARIA 1.2에서 사용 중단
WAI-ARIA 1.1까지 aria-invalid은 모든 요소에 쓸 수 있는 전역 속성이었지만, WAI-ARIA 1.2에서 전역 사용이 사용 중단(deprecated)되어 아래 “사용할 수 있는 역할”에 나열된 역할(과 그 역할을 상속하는 역할)에만 쓰도록 바뀌었습니다.
테스트할 때는 잘못된 값을 넣고 제출했을 때 필드에서 “잘못된 입력”과 오류 메시지가 함께 읽히는지, 값을 고친 뒤에는 오류 상태가 사라지는지, 페이지 첫 로드 때 오류 상태가 붙어 있지 않은지 확인합니다.
값
| 값 | 의미 |
|---|---|
true | 값이 유효성 검사를 통과하지 못했습니다. |
false 기본값 | 오류가 감지되지 않았습니다. |
grammar | 문법 오류가 감지되었습니다. |
spelling | 맞춤법 오류가 감지되었습니다. |
(그 밖의 값) | 목록에 없는 값이나 빈 값은 true로 처리됩니다(빈 문자열은 false). |
사용 예
오류 메시지와 함께
<label for="email">이메일</label>
<input id="email" type="email" aria-invalid="true" aria-describedby="email-err">
<p id="email-err">이메일 형식이 올바르지 않습니다. 예: [email protected]</p>검사 후 상태 바꾸기
function validate(input, errEl) {
var ok = input.checkValidity(); // HTML 제약 검증 결과 활용
if (ok) {
input.removeAttribute('aria-invalid');
errEl.textContent = '';
} else {
input.setAttribute('aria-invalid', 'true');
errEl.textContent = '이메일 형식이 올바르지 않습니다.';
}
return ok;
}
input.addEventListener('blur', function () { if (input.value) validate(input, errEl); });처음부터 오류로 표시 (비권장)
<!-- 페이지 로드 직후, 사용자가 아무것도 입력하지 않았는데 -->
<input id="name" type="text" required aria-invalid="true">사용자가 입력을 시작하기도 전에 “잘못된 입력”이 들려 혼란을 줍니다. 제출하거나 필드를 떠날 때 검사합니다.
오류 메시지 없이 상태만 표시 (비권장)
<input id="phone" type="tel" aria-invalid="true" class="red-border">무엇이 틀렸는지 알 수 없습니다. 오류 내용을 텍스트로 제공하고 연결합니다.
직접 해 보기
이메일을 잘못 입력하고 입력란을 벗어나거나 “확인”을 눌러 보세요. 올바르게 고치면 오류 상태가 사라집니다.
실시간 코드 — 조작하면 속성 값이 바뀌는 모습을 볼 수 있습니다
화면낭독기에서는
| 상황 | 들리는 안내 (예) |
|---|---|
| 오류가 있는 필드에 포커스 | 이메일, 편집 창, 잘못된 입력, 이메일 형식이 올바르지 않습니다. 예: [email protected] |
| 값을 고친 뒤 다시 포커스 | 이메일, 편집 창, [email protected] |
aria-invalid="spelling" 편집기 (지원 환경) | 맞춤법 오류 |
사용 지침
이렇게 쓰세요
- 검사에 실패한 필드에만
true를 설정하고, 고치면 즉시 해제합니다. - 오류 메시지를 텍스트로 제공하고
aria-describedby로 연결합니다. - 제출 시 오류가 있으면 첫 번째 오류 필드로 포커스를 옮기거나 오류 요약을 제공합니다.
- 색 외에 아이콘·텍스트로도 오류를 표시합니다.
이렇게 쓰지 마세요
- 사용자가 입력하기 전부터
true로 표시하지 않습니다. - 오류 메시지 없이 속성만 설정하지 않습니다.
- 1.2에서 지원하지 않는 역할(버튼, 일반 텍스트 등)에 쓰지 않습니다.
사용할 수 있는 역할
관련 속성·패턴
이 속성을 쓰는 패턴