Номер телефона

Последнее обновление:

Как программно нажать на клавишу в языке javascript?

Нажать руками на клавиатуре клавишу очень просто - об этом все знают. А вот как эмулировать такое нажатие? Т.е. как сделать команду на языке JS (javascript), чтобы компьютер "подумал", что будто бы пользователь сам нажал клавишу? По-другому это называется еще эмуляцией нажатия клавиш. Для примера, рассмотрим клавишу Escape. Как ее "нажать"?

Для решения подобных задач можно использовать пользовательские (кастомные) события клавиатуры. Их, эти события, следует создать и потом - запускать. Они и обеспечат программное нажатие клавиш средствами JS.

Посмотрим такой программный код:

 
 var ev = document.createEvent('KeyboardEvent'); // Имитируем нажатие Escape (а иначе НЕ будет удален обработчик keydown)
     
if(typeof ev.initKeyEvent !== 'function'){ Для новых браузеров; ( > Firefox 30 ) document.body.dispatchEvent(new KeyboardEvent("keydown", { key: "Escape", keyCode: 27, // Это цифровой код клавиши Escape. code: "Escape", // Код клавиши в буквенном виде. which: 27, shiftKey: false, // false, т.к. мы не хотим одновременно нажимать и удерживать клавиши Shift, ctrlKey: false, // Ctrl, metaKey: false // meta }));
}else{ // // Для старых браузеров ( <= Firefox 30)
ev.initKeyEvent( 'keydown', // Тип события: keydown, keyup, keypress true, // bubbles true, // cancelable window, // view: должно быть window false, // ctrlKey false, // altKey false, // shiftKey false, // metaKey 27, // keyCode: также может быть 0 0 // charCode: unsigned long - Unicode-символ, связанный с клавишей, также м.б. 0 ); document.body.dispatchEvent(ev); }

Немного пояснений

Вначале задаем переменную ev, представляющую собой событие клавиатуры. Выясняем, есть ли у нее метод initKeyEvent (т.е. является ли он, собственно, методом, т.е. функцией). Если НЕ является, значит, по всей видимости, мы имеем дело уже с новым браузером, в котором данный метод не работает (в силу того, что он является устаревшим, deprecated). В новых браузерах следует создавать события клавиатуры на основе конструктора: new KeyboardEvent.

Далее - все просто. Событие клавиатуры в данном примере создается для элемента document.body, представляющего собой тег <body> вебстраницы, т.е., по сути, всю ее область. Можно, разумеется, назначить такое событие и для другого элемента, если не следует его вызывать для всего тела страницы.

Наконец, далее задается событие через конструктор и сразу же и запускается командой dispatchEvent. В качестве аргумента конструктора фигурирует специальный объект, в котором задаются соответствующие свойства будущего события клавиатуры.

Но что, если браузер - старый? Ведь любой уважающий себя (и окружающих) вебразработчик обязан делать кроссбраузерную вебстраницу - такую, которая бы без проблем открывалась и функционировала не только в новых браузерах, но и в тех, которые постарше.

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

Такой браузер может не поддерживать конструктор KeyboardEvent, но зато он, скорее всего, поддерживает метод initKeyEvent для пользовательского события клавиатуры. Для него будет работать код после слова else.

Как видим, в этом случае также используется специальный объект со свойствами события и затем точно также используется метод dispatchEvent, только не в виде конструктора.

Сделав такой простой программный код, мы избавляемся от необходимости использовать соответствующий полифилл и добьемся универсальности его работы в самых разных браузерах. Судя по информации с сайта caniuse.com, конструктор работоспособен в браузерах, начиная от Firefox 31, Google Chrome 26, Opera 15 и т.д. Т.е. он работоспособен даже в уже достаточно немолодых браузерах. Ну, а дополнения с initKeyEvent делает его рабочим, наверное, практически везде, даже в несколько подзабытых IE9+. В некоторых браузерах, например, Firefox 32 - 38 (как минимум) работоспособна оба варианта (фактически же сработает первый).




Комментарии:
Всего комментариев:0
Пожалуйста, не забудьте ознакомиться с правилами оставления комментариев.



Подписаться на комментарии на этой странице

Мы можем выполнить

Другие услуги
Интересная и полезная
информация
НАПИШИТЕ НАМ
Яндекс.Метрика
Номер телефона
© Copyright Все права защищены 2013-2024 Научный консалтинг