Почему Javascript IF keyCode === Клавиша Enter или клавиша пробела не работают с программой чтения с экрана NVDA?

Я работаю над доступностью для сайта клиента и использую JQuery / Javascript, чтобы определить, были ли нажаты клавиши клавиатуры Enter или пробел, что отлично работало ...

$(document).addEventListener('keydown', navKeyboardHandler);

navKeyboardHandler = function(e) {
    console.info('a keyboar key was pressed'); // This does work

    if (e.keyCode === 13 || e.keyCode === 32) { // Keyboard Enter OR Spacebar pressed
        console.info('enter or spacebar key pressed ! ! !'); // This does NOT work
    }
};

... пока я не включил NVDA, чтобы проверить навигацию по клавиатуре с помощью программы чтения с экрана! Он просто игнорирует это заявление. Время от времени это срабатывает. Как один раз из 10 или 20 нажатий на клавиатуру. Это непостоянно в отношении того, когда он выбирает срабатывание.

Что в моем операторе IF нужно изменить, чтобы это работало? Любая помощь будет принята с благодарностью. Я тестирую это с помощью Chrome и Firefox в Windows.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
0
3 641
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Я обратился к людям из сообщества специальных возможностей через их канал Slack: web-a11y.slack.com

и кто-то предоставил приличныйрешение:

It probably won't fire because NVDA intercepts the keys if you are in browse mode, which is normal. If you were to manually switch to focus mode (insert + space -- you'll hear a "typewriter" sound), the code should get passed through.

Есть ли способ вызвать событие клавиатуры (вставка + пробел) через JavaScript?

Tonte Pouncil 02.12.2019 17:16

Похоже, вы не можете этого сделать, так как это находится вне контроля браузера. У некоторых пользователей этот режим может быть по умолчанию, а у некоторых нет, и в конечном итоге они просто переключаются взад / вперед. Лучший способ - попытаться заставить что-то происходить в событии щелчка, так как это работает в обоих режимах (хотя все зависит от вашей конечной цели).

allenski 02.12.2019 19:22

Скорее всего, это не JavaScript. Вероятно, дело в HTML. Определенные роли и атрибуты aria сообщают программе чтения с экрана, находится ли она в режиме просмотра или в режиме фокуса (или в режиме приложений).

For example, when the tablist and tab roles are used as part of the tab widget design pattern, using the tab key to move focus onto the first tab in the set causes a Windows screen reader to automatically switch into applications mode. From that point all the keyboard interaction is handled by the script.

Подробнее о режимах взаимодействия с программой чтения с экрана здесь

Подробнее о режиме просмотра NVDA и режиме фокусировки в Руководство пользователя NVDA

В зависимости от того, какой виджет вы создаете (если бы вы предоставили дополнительную информацию и свой HTML-код, возможно, я мог бы уточнить), вам может потребоваться добавить различные атрибуты role или aria, чтобы программа чтения с экрана автоматически переключилась в наиболее подходящий режим. Я рекомендую вам внимательно просмотреть Шаблон проектирования WAI-ARIA для любого вида виджета, который вы создаете.

Эта ссылка содержит дополнительную информацию о том, какие виджеты запускают режим фокуса http://accessibleculture.org/articles/2012/09/aria-widgets-and-focus-forms-mode-support/

Добавьте role = "application" в свой html виджета и попробуйте, у меня это работает.

Не знаю, как это поможет. Не могли бы вы уточнить свой ответ и у вас есть ссылки / документация для справки? Спасибо.

allenski 22.04.2019 22:52

Я думаю, он имеет в виду эту ветку github.com/nvaccess/nvda/issues/7898#issuecomment-529384975

Quer 06.07.2021 07:36

Другие вопросы по теме