Лучший способ сфокусировать элемент любого вида - PullRequest
0 голосов
/ 30 декабря 2018

У меня есть следующие требования:

На моей веб-странице есть якорные ссылки для навигации (например, skip to content и т. Д.).Эти якоря должны отображать целевой элемент и фокусировать его.(Фокус важен, потому что в противном случае программы чтения с экрана неправильно позиционируются. Пока мой код выглядит так:

<a href="#content" class="navbtn">Skip to content</a>
<!-- somewhere else...-->
<div id="content" tabindex="-1">
Lorem ipsum...
</div>
<script>

$(".navbtn").click(function(e) {

    e.preventDefault();

    $("#content").focus();
});

</script>

Обратите внимание, что я знаю, что это жестко, и я изменю это вв будущем, но для целей тестирования я оставил это так.

ОК, так что это делает? В этом посте было сказано, что описанный выше метод фокусирует элемент div. Визуально я не могу судить, но программа чтения с экрана не будет перемещаться к элементу (я использую VoiceOver в Safari на iPhone). Если целью является кнопка, ссылка или любой другой элемент, который по умолчанию имеет tabindex, он работает нормально.

Есть идеи?

РЕДАКТИРОВАТЬ: я получил, чтобы он работал с моим дисплеем Брайля при нажатии левой клавиши режима. Я обычно использую правую клавишу режима, чтобы отправить событие двойного нажатия на телефон, ноправый не работает. Однако левый работает. Честно говоря, я не знаю почему. Двойной тап по экрану не работает ... В любом случае, JavaScript не нужен.

Ответы [ 4 ]

0 голосов
/ 15 апреля 2019

Voiceover на iOS не будет учитывать изменения фокуса JavaScript на большинстве элементов, которые не могут быть изначально сфокусированы, независимо от установки tabindex = "- 1" или tabindex = "0".Если вам нужно сместить фокус на iOS, то я добавил пустой тег и установил для него фокус, это не лучшее решение, но пока единственное доступное на iOS.

0 голосов
/ 31 декабря 2018

Вы делаете слишком много работы.По умолчанию <a> переместит фокус для вас.Однако, если элемент назначения не является изначально фокусируемым элементом, он также должен иметь tabindex="-1" для некоторых браузеров (в основном Internet Explorer).См. « Доступные элементы HTML » в разделе «Об активной поддержке доступности», чтобы узнать причину.

Так что приведенный выше пример будет работать просто:

<a href="#content" class="navbtn">Skip to content</a>
<!-- somewhere else...-->
<div id="content" tabindex="-1">
Lorem ipsum...
</div>

Нет JavaScriptнужно.Вы можете проверить это, используя клавиатуру для перехода по ссылке «Перейти к содержанию», затем нажав введите .Если затем снова нажать tab , фокус должен переместиться на любой фокусируемый элемент после

.

Если вы затем shift + tab , вы не вернетесь к

(это поведение, которое вы хотите), потому что оно имеет tabindex="-1" вместо tabindex="0".

Я использую этот шаблон всевремя на моих доступных веб-сайтах.

Однако (и это большое "однако", и я думаю, что это главный вопрос), VoiceOver на iOS (не уверен насчет Mac) будет не соблюдать изменение фокуса.Это ошибка (на мой взгляд) с Apple.Перейдите на любой веб-сайт, на котором есть ссылки на странице, и фокус VoiceOver не будет перемещать целевой элемент.Вы можете увидеть одну ссылку на эту проблему в https://www.applevis.com/forum/ios-ios-app-discussion/skip-link-issue

К сожалению, вы должны написать свой код, используя простой пример (JavaScript не требуется), и пользователи VoiceOver на iOS будут продолжать иметь проблему, как и на всехдругие сайты.

0 голосов
/ 01 января 2019

Я только что протестировал следующее (без JavaScript) на iPhone под управлением iOS12 с VoiceOver в Safari:

<a href="#content">Skip to content</a>
...
<div id="content" tabindex="-1">Target content...</div>

Все работало, как и ожидалось, с фокусом на целевой контент и объявлением VoiceOver«Целевой контент ...».Можете ли вы описать шаги, которые вы предпринимаете при тестировании, более подробно?

0 голосов
/ 31 декабря 2018

Используйте tabindex = "- 1" в div вместо tabindex = "0".Это сделает div программно фокусируемым, тогда как tabindex = "0" делает его ориентированным на пользователя (поскольку кто-то использует клавишу табуляции для перемещения по содержимому).Подробнее о Использование атрибута tabindex

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...