Библиотека ally.js предоставляет мощные инструменты
для анализа доступности элементов на веб-странице. Одним из ключевых
аспектов доступности является корректная работа фокусируемых элементов,
которая напрямую связана с атрибутом tabindex. Этот атрибут
определяет порядок перехода по элементам с помощью клавиши Tab и
возможность установки фокуса на элемент.
tabindex в
ally.jsВ ally.js для проверки валидности tabindex используется
модуль query.tabindex, который
позволяет:
tabindex.Пример базового использования:
import * as ally from 'ally.js';
const tabbableElements = ally.query.tabindex({ context: document });
console.log(tabbableElements);
Параметр context задаёт область документа для поиска.
Если его не указать, проверка выполняется по всему документу.
Атрибут tabindex может принимать значения:
element.focus()).Ally.js позволяет фильтровать элементы с некорректными значениями:
const invalidTabindexElements = ally.query.tabindex({
context: document,
includeNegative: true,
filter: function(element) {
const value = element.getAttribute('tabindex');
return isNaN(value) || !Number.isInteger(Number(value));
}
});
console.log(invalidTabindexElements);
В данном примере возвращаются элементы с tabindex,
которые не являются целыми числами. Это помогает выявить ошибки, которые
могут нарушить ожидаемое поведение фокусировки.
Ally.js позволяет классифицировать элементы на tabbable и focusable:
tabindex=-1).Пример разделения:
const tabbableElements = ally.query.tabbable({ context: document });
const focusableElements = ally.query.focusable({ context: document });
console.log('Tabbable:', tabbableElements);
console.log('Focusable:', focusableElements);
Такое разделение полезно для анализа доступности форм и интерактивных компонентов, чтобы убедиться, что последовательность фокуса логична.
Ally.js поддерживает кастомные фильтры, позволяя создавать проверки под конкретные требования проекта. Например, исключение определённых элементов по CSS-классу:
const validTabindexElements = ally.query.tabindex({
context: document,
filter: (el) => !el.classList.contains('ignore-tab')
});
console.log(validTabindexElements);
Можно комбинировать фильтры для сложной логики проверки, включая
отрицательные и положительные значения tabindex, а также
исключение скрытых элементов.
Для быстрого анализа удобно выводить результаты с подробной информацией:
validTabindexElements.forEach(el => {
console.log({
element: el,
tabindex: el.getAttribute('tabindex'),
focusable: ally.element.isFocusable({ element: el }),
tabbable: ally.element.isTabbable({ element: el })
});
});
isFocusable — проверяет, можно ли
программно сфокусировать элемент.isTabbable — проверяет, участвует ли
элемент в естественном порядке табуляции.Такой подход позволяет выявить элементы, которые имеют правильный
tabindex, но некорректно интегрируются в последовательность
навигации.
tabindex, чтобы не нарушать
естественный порядок, если нет строгой необходимости.Ally.js обеспечивает глубокий контроль над фокусируемыми элементами и
позволяет автоматически выявлять проблемы с tabindex,
минимизируя ошибки при разработке интерфейсов с поддержкой клавиатурной
навигации. Проверка валидности и корректного порядка элементов
становится простой и системной, обеспечивая доступность на уровне
кода.