Ситуация
У меня есть область экрана, которую можно показать и скрыть с помощью JavaScript (что-то вроде «показать / скрыть параметры расширенного поиска»). Внутри этой области есть элементы формы (выберите, флажок и т. Д.). Для пользователей, использующих вспомогательные технологии, такие как программа чтения с экрана (в данном случае JAWS), нам необходимо связать эти элементы формы с меткой или использовать атрибут «title» для описания назначения каждого элемента. Я использую атрибут title, потому что для метки недостаточно места, а всплывающая подсказка удобна для пользователей, не читающих экран.
Код выглядит примерно так:
<div id="placeholder" style="display:none;">
<select title="Month">
<option>January</option>
<option>February</option>
...
</select>
</div>
Проблема
Обычно JAWS не будет читать скрытые элементы ... потому что они скрыты, и он это знает. Однако, кажется, что если элемент имеет набор заголовков, JAWS читает его, несмотря ни на что. Если я удаляю заголовок, JAWS ничего не читает, но, очевидно, это разметка, недоступная.
Возможные решения
Моей первой мыслью было использование скрытого ярлыка вместо заголовка, например:
<div id="placeholder" style="display:none;">
<label for="month" style="display:none">Month</label>
<select id="month">...</select>
</div>
Это приводит к точно такому же поведению, и теперь мы теряем всплывающие подсказки для пользователей, не читающих экран. Кроме того, мы получаем в два раза больше Html.
Второй вариант - по-прежнему использовать метку, расположить ее на экране. Таким образом, он будет прочитан программой чтения с экрана, но не будет виден визуальному пользователю:
<div id="placeholder" style="display:none;">
<label for="month" style="position:absolute;left:-5000px:width:1px;">Month</label>
<select id="month">...</select>
</div>
Это на самом деле работает, но мы снова теряем всплывающую подсказку и все еще генерируем дополнительный HTML.
Мое третье возможное решение - рекурсивно перемещаться по DOM в JavaScript, удаляя заголовок, когда область скрыта, и добавляя его обратно, когда область отображается. Это также работает ... но довольно уродливо по очевидным причинам и не очень хорошо подходит для более общего случая.
Есть еще какие-нибудь идеи? Почему JAWS ведет себя так?