Выбор ответа Middle Доступность обновлено

Почему aria-live молчит

Вопрос

После отправки формы код вставляет в страницу блок с aria-live="polite" и сразу с текстом ошибки. Скринридер ничего не зачитывает. Почему?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Живая область должна быть в DOM заранее: читаются изменения уже существующей. Скринридер отслеживает изменения в живых областях, которые уже есть в дереве доступности.

Варианты ответа

  1. polite никогда не зачитывается автоматически, для ошибок нужен только assertive
  2. aria-live работает только на полях <input> и <textarea>, а не на блоках
  3. Живая область должна быть в DOM заранее: читаются изменения уже существующейправильный ответ
  4. Ошибки нужно показывать через alert(), иначе скринридер их вообще не видит

Разбор

Скринридер отслеживает изменения в живых областях, которые уже есть в дереве доступности. Если область появилась вместе с текстом, изменения внутри неё не было, и многие скринридеры промолчат. Правильно: держать пустой контейнер с aria-live и менять в нём текст. polite зачитывается, просто после текущей фразы; к <input> атрибут не привязан; alert() не нужен.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.