awesome-everything EN
↑ Обратно к восхождению

Архитектура фронтенда

Доступные формы: тест с выбором ответа

Суть Синтез по всему юниту в формате тестов: связь label, озвучивание ошибок, фокус на первом невалидном поле, native против ARIA и constraint validation.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 13 min

Шесть вопросов, охватывающих весь юнит. Каждый отражает решение, которое вы принимаете на реальном ревью формы, — не определение для пересказа, а выбор между формой, которая работает для всех, и формой, которая работает только с мышью.

Цель

Убедитесь, что вы связываете воедино связь label, озвучивание ошибок, focus management, нативную семантику и constraint validation — тот синтез, к которому вёл урок.

Викторина

Поле показывает свою подпись только как placeholder. Коллега утверждает, что это нормально, ведь текст виден. Почему это всё равно нарушение WCAG?

Викторина

Кастомная JS-валидация на submit находит три невалидных поля. Команда красит их в красный и прокручивает к первому. Пользователь клавиатуры/screen reader всё равно ничего не слышит. Какой главный пропущенный шаг?

Викторина

Вы добавили div с role=button и обработчиком клика, стилизованный точно по дизайну. Пользователь клавиатуры сообщает, что кнопка не работает. Что забыли помимо role?

Викторина

Вы вставляете сообщение об ошибке в div с role=alert в том же рендере, где этот div впервые монтируется. Зрячие видят его; многие пользователи screen reader ничего не слышат. Почему?

Викторина

Форма полагается полностью на нативную constraint validation (required, type=email, pattern). Затем команда добавляет e.preventDefault() ради кастомных сообщений и асинхронных проверок. Какую ответственность они только что унаследовали?

Викторина

Дизайну нужен стилизованный дропдаун, который нативный select не повторяет визуально. Какая реализация — выбор по умолчанию для senior, и почему?

Итог

Сквозная линия — одно дерево решений: каждому контролу нужно программно связанное имя (настоящий label, а не placeholder); ошибки должны жить в уже существующем live-регионе и быть привязаны к полю через aria-invalid + aria-describedby; на неудачном submit нужно переместить фокус на первое невалидное поле, а не просто прокрутить; нативные элементы несут role, фокусируемость и обработку клавиатуры, которые нельзя полностью воспроизвести; и как только вы делаете preventDefault, вы наследуете ответственность за фокус и озвучивание, которую браузер брал на себя бесплатно. К виджетам на ARIA обращайтесь в последнюю очередь и только когда нативный элемент действительно не справляется.

Продолжить восхождение ↑Доступные формы: свободное воспроизведение
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.