Я второй, что brennanyoung сказал о том, как вы использовали элемент span
и почему это, вероятно, является причиной того, что ваш код работает не так, как вы ожидаете.
По моему мнениювам действительно следует рассмотреть возможность использования элемента button
для переключения содержимого, поскольку это позволит избежать дополнительной работы, такой как:
- , обеспечивающей, что
span
охватывает всю кнопку, чтобы предотвратить нажатие кнопки, котораяничего не даст (произнесение этого вслух звучит странно), обработка - фокусирует
span
, - , гарантируя, что
span
правильно действует как button
(щелчок, нажатие и др.)button
связанных событий).
Кроме того, программный запуск события click
в вашем коде является подсказкой, что можно сделать что-то проще.
hidden
+ aria-labelledby
Я бы хотел сделать это как можно проще, используя атрибут hidden
для содержимого, подлежащего переключению, и aria-expanded
на кнопке, переключающей его.
Разборные секции«Книга инклюзивных компонентов» Хейдона Пикеринга очень хорошо прочитана, если вам нужны… ну, разборные разделы.На самом деле вся книга замечательная, вы не потратите время на ее чтение, если вы еще этого не сделали.
Атрибут hidden
правильно обрабатывается программами чтения с экрана и скрывает элемент как визуально, так и издерево доступности.Вы можете использовать его практически во всех недавних веб-браузерах (https://caniuse.com/#search=hidden),, что делает его хорошим кандидатом на избежание манипулирования с классами и свойством CSS display
.
Если вы хотите использовать aria-labelledby
(между прочим, 2 "L", в вашем коде отсутствует один) для контента (и вы должны это сделать, поскольку вы объявили его как регион), с использованием текста button
в качестве метки.
Однако, если вы планируете использовать текст, описывающий действие (например, «Показать правила» или «Скрыть правила» в зависимости от состояния), это больше не имеет значения, и вам придетсяиспользуйте другой элемент в качестве метки для этого ориентира. Элемент h4
в вашем коде, кажется, выполняет свою работу, а присвоение ему id
позволит программам чтения с экрана легче идентифицировать регион.
Пример
Я взял на себя смелость переписать приведенный вами пример, чтобы использовать только простой JS, с небольшими изменениями, которые я упомянул.