Кратко
СкопированоСвойство связи и виджета из WAI-ARIA. Оно связывает текст ошибки с элементом, в котором что-то пошло не так.
Пример
Скопировано
<label for="email"> Ваша почта (обязательно):</label><input id="email" type="email" name="email" aria-invalid="false" aria-errormessage="error" required><span class="error-message" id="error" aria-live="assertive"> Поле с почтой обязательно для заполнения.</span><button class="button button-aqua"> Отправить</button>
<label for="email">
Ваша почта (обязательно):
</label>
<input
id="email"
type="email"
name="email"
aria-invalid="false"
aria-errormessage="error"
required
>
<span
class="error-message"
id="error"
aria-live="assertive"
>
Поле с почтой обязательно для заполнения.
</span>
<button class="button button-aqua">
Отправить
</button>
.error-message { display: none;}
.error-message {
display: none;
}
В демо показываем ошибку, когда поле почты не заполнено и при этом нажата кнопка «Отправить».
Скринридер прочтёт ошибку примерно так: «Ваша почта обязательно, редактировать, обязательно, неверно. Поле с почтой обязательно для заполнения».
Как пишется
СкопированоДобавьте к тегу aria со значением в виде ID и свяжите с ним другой тег с текстом ошибки и таким же ID. Если элемент связан с несколькими ошибками, перечислите в атрибуте несколько ID через пробел.
<label for="email"> Ваша почта (обязательно):</label><input id="email" type="email" name="email" aria-invalid="false" aria-errormessage="error success" required><span id="error" aria-live="assertive" hidden> <!-- Текст ошибки --></span><span id="success" aria-live="polite" hidden> <!-- Текст про успешное действие --></span>
<label for="email">
Ваша почта (обязательно):
</label>
<input
id="email"
type="email"
name="email"
aria-invalid="false"
aria-errormessage="error success"
required
>
<span
id="error"
aria-live="assertive"
hidden
>
<!-- Текст ошибки -->
</span>
<span
id="success"
aria-live="polite"
hidden
>
<!-- Текст про успешное действие -->
</span>
Этот атрибут раньше использовали для всех тегов и ролей, но сейчас его можно задавать только некоторым интерактивным элементам:
<textarea>,<input>с типамиtext,email,tel,urlили ролиtextbox.<input typeили роли= "checkbox"> checkbox.<input typeили роли= "range"> slider.<input typeили роли= "number"> spinbutton.<select>или ролямcomboboxиlistbox.<td>и<th>или ролиgridcell.radiogroup.application.tree.
Обязательно сочетайте aria с другим атрибутом aria. Когда у aria значение false, текст связанной с элементом ошибки нужно скрыть. Если пользователь неправильно заполнил поле и значение aria стало true, стоит показать ошибку всем, включая пользователей скринридеров. С этим поможет JavaScript.
Скрыть ошибку от всех можно с помощью свойства display. Другой вариант — добавлять текст ошибки методами из JavaScript. Например, append или insert.
Также не забывайте добавлять для элемента с ошибкой атрибут aria со значением assertive или роль alert. Благодаря им скринридер расскажет об ошибке как только она появится на странице.
Так как текст ошибки из aria не всегда озвучивается скринридерами, лучше использовать вместо него aria. Этот атрибут работает точно так же, но в него можно добавлять любое краткое описание элемента, не только текст ошибки.
<label for="email"> Ваша почта (обязательно):</label><input id="email" type="email" name="email" aria-invalid="false" aria-describedby="error" required><span class="error-message" id="error" aria-live="assertive"> Поле с почтой обязательно для заполнения.</span>
<label for="email">
Ваша почта (обязательно):
</label>
<input
id="email"
type="email"
name="email"
aria-invalid="false"
aria-describedby="error"
required
>
<span
class="error-message"
id="error"
aria-live="assertive"
>
Поле с почтой обязательно для заполнения.
</span>
Как понять
Скопированоaria связывает один элемент с другим, в котором содержится сообщение об ошибке.