Я работаю над доступностью для сайта клиента и использую 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.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я обратился к людям из сообщества специальных возможностей через их канал 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. Вероятно, дело в 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 виджета и попробуйте, у меня это работает.
Не знаю, как это поможет. Не могли бы вы уточнить свой ответ и у вас есть ссылки / документация для справки? Спасибо.
Я думаю, он имеет в виду эту ветку github.com/nvaccess/nvda/issues/7898#issuecomment-529384975
Есть ли способ вызвать событие клавиатуры (вставка + пробел) через JavaScript?