Кратко
СкопированоСвойство связи и виджета из 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
связывает один элемент с другим, в котором содержится сообщение об ошибке.