кроссбраузерное нажатие клавиш для специальных клавиш (стрелки, ...) в JavaScript - PullRequest
6 голосов
/ 07 октября 2011

Я строю интерфейс браузера для терминала. Мне нужно отлавливать как символьные (буквенно-цифровые, точка, косая черта, ...), так и не символьные нажатия клавиш (стрелки, F1-F12, ...). Кроме того, если пользователь удерживает какую-либо клавишу, было бы неплохо получать повторные нажатия клавиш (функция должна вызываться повторно до тех пор, пока клавиша не будет отпущена). То же самое касается клавиши пробела, символов, ...

Я хочу, чтобы это было как можно больше в разных браузерах ( jQuery keypress не удается на этой учетной записи). Я также пытался использовать fork of jquery.hotkeys.js , но если я правильно понял, я не могу поймать как специальные, так и символьные клавиши в одной функции (нужно использовать keydown для первого и keydown для последний).

Есть ли библиотека JS, которая позволяла бы мне ловить как символьные, так и специальные клавиши?

Надеюсь, я не пропустил что-то очевидное. :)

ОБНОВЛЕНИЕ Чтобы уточнить: я ищу библиотеку, которая скрыла бы от меня детали реализации браузера.

Ответы [ 3 ]

4 голосов
/ 07 октября 2011

onkeydown это именно то, что вам нужно.Он фиксирует все клавиши, даже если вы удерживаете кнопку, она запускается несколько раз.

<input type='text' onkeydown='return myFunc(this,event)'>

<script>
   function myFunc(Sender,e){
     var key = e.which ? e.which : e.keyCode;

     if(key == someKey){ // cancel event and do something
        ev.returnValue = false;
        if(e.preventDefault) e.preventDefault();
        return false;
     }
   }
</script>

ОБНОВЛЕНИЕ попробуйте и протестируйте это с помощью jQuery

$(document).ready(function(){
$('#in').keydown(fn);
});

var cnt = 0;
function fn(e){
   var key = e.keyCode ? e.keyCode : e.which;
   cnt++;

   if(cnt == 10) {
  alert('event was fired 10 times. Last time with key: '+key);
      cnt = 0;
   }
}
1 голос
/ 11 октября 2011

В итоге я использовал keycode.js , но я строю целую систему управления событиями вокруг событий keydown, keypress и keyup, потому что одного из событий (keydown) недостаточно, чтобы определить, какой символбыл введен и какая клавиша была нажата, если нет соответствующего символа.Несовместимость браузера является дополнительным бонусом к этой проблеме.:)

Спасибо вам обоим за ваши ответы, это помогло мне полностью понять проблему.

1 голос
/ 07 октября 2011

Спецификация DOM 3 Events включает в себя ключевые события , но это все еще рабочий черновик, так что, вероятно, пока что не так широко поддерживается, но должно быть довольно полезным.

Для преобразования кодов клавиш в символы может оказаться полезным Quriskmode . Зная, какая клавиша была нажата и какие модификаторы должны привести вас туда, где вы хотите быть. Обратите внимание, что у вас могут возникнуть проблемы с отображением всех клавиатур в одни и те же наборы символов, потому что у некоторых есть клавиши, которых нет у других (например, клавиша Microsoft «windows» и клавиша Apple). Может потребоваться немного проб и ошибок.

Да, и вы могли бы найти статью Безумие JavaScript: События клавиатуры интересно.

...