Спасибо, Дмитрий — использование `aria-disabled`, управление фокусом с помощью `tabindex` и добавление `aria-describedby` для объяснения — это хороший базовый уровень доступности. С точки зрения производительности, если у вас есть тысячи таких ссылок в виртуализированном списке, как бы вы реализовали поведение «предотвратить навигацию при отключении», не привязывая обработчики событий к каждому элементу?

Используйте делегирование событий на контейнере списка и находите ссылку через closest. Но у отключённой ссылки также уберите href, чтобы исключить открытие через контекстное меню.

Короткий ответ

Что ответить на собеседовании

Используйте делегирование событий на контейнере списка и находите ссылку через closest. Но у отключённой ссылки также уберите href, чтобы исключить открытие через контекстное меню.

Подробный разбор

Ответ с пояснениями

Используйте делегирование событий на контейнере списка и находите ссылку через closest. Но у отключённой ссылки также уберите href, чтобы исключить открытие через контекстное меню.

Контейнер может перехватывать click/auxclick и отменять действие для элемента с aria-disabled=true; обработчик проверяет, что элемент принадлежит этому списку. Клавиатурная навигация и объяснение причины остаются доступными по выбранной политике фокуса. CSS pointer-events:none недостаточен: он не задаёт поведение клавиатуры и семантику недоступности.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее