Отправляет email-рассылки с помощью сервиса Sendsay

[prg] javascript. Как назначить гор.клавиши на нажатие клавиатурных клавиш

Здравствуйте, уважаемые!

Вот код, который не работает с элементом div, но отлично работает с
применением поля редактирования input, что мне очень не нравится.
Может как-то можно с использованием div, чтобы в любом месте нажал
горячие клавиши и получил какой-то результат?

<html>
<head>
<title>тест2 горячих клавиш</title>
<script>
function press(event) {
if (event.keyCode == 74) {
alert("нажата клавиша английская j или русская о");
}
if (event.keyCode == 75) {
alert("нажата клавиша английская k или русская л");
}
if (event.keyCode == 76) {
alert("нажата клавиша английская l или русская д");
}
}
</script>
</head>
<body>

<div onkeydown="press(event)">

</div>
</body></html>

с уважением
Грызунов Александр

Ответить   Tue, 18 Jun 2019 21:49:25 +0400 (#3621532)

 

Ответы:

Здравствуйте, Грызунов Александр.

С div у вас не работает, потому что вы обрабатываете на нём событие
onkeydown, происходящее в тот момент, когда происходит нажатие клавиш на
сфокусированном элементе, а обычный div не фокусируется в принципе.
Чтобы ваш код заработал, вам надо сделать div фокусируемым при помощи
атрибута tabindex="0", затем переместить на него фокус браузера (не одно и
тоже с фокусом программы экранного доступа), ну и нажать целевую
клавиатурную команду.
Впрочем, есть подозрения, что это не совсем то, чего вы добиваетесь.
Если вас интересует в принципе отлавливание нажатия каких-то клавиш на
странице без привязки к сфокусированным элементам, то надо всей странице
назначить обработчик событий и ловить это там:

document.addEventListener('keydown', function(event) {
// Обработка клавиш по скан-кодам или названиям
});

В общем посмотрите документацию по методам addEventListener и
removeEventListener.
Успехов. Никита.

Ответить   Tue, 18 Jun 2019 22:37:40 +0300 (#3621538)

 

Здравствуйте, Александр.

Дело в том, что клавиши перехватывает скринридер, и поэтому вы не можете
их обработать. Скринридер перестает обрабатывать нажатия клавиш, когда
отключен виртуальный курсор, к примеру, включен режим form или режим
application. Вы можете принудительно активировать режим application
используя соответствующую роль <div role="application"> и когда фокус
попадет на элемент, который находится внутри элемента с этой ролью, вы
сможете обрабатывать все клавиши, однако, это не будет работать если
фокус находится в другом месте страницы, а оборачивать этой ролью всю
страницу крайне не рекомендуется, т.к. это отключит все привычные
горячие клавиши скринридера, то есть пользователь не сможет
использовать, к примеру, left/right arrowkeys чтобы изучать текст
посимвольно.

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

Еще один вариант, воспользоваться атрибутом accesskey, который позволит
назначить клавишу на конкретную кнопку, это будет работать везде, но
пользователю придется нажимать какую-то клавишу модификатор, которая или
которые будут различаться в зависимости от браузера.

Ответить   Tue, 18 Jun 2019 23:18:02 +0300 (#3621540)

 

Я как раз и сказал , что клавиши работают.- в противном случае, они не
работали бы даже с элементом input. Включаешь как на youtube insert + space
и нажимай назначенные клавиши. Просто это пока работает, если фокус
курсора находится на поле редактирования, созданного элментом input.
Поэтому хочу от него избавиться, сохранив функционал клавиш.

Ответить   Wed, 19 Jun 2019 09:54:48 +0400 (#3621554)