JQuery свойство кода события клавиатуры всегда неопределено - PullRequest
1 голос
/ 13 апреля 2020

Согласно MDN события клавиатуры имеют свойство code, которое возвращает строковую константу, например "KeyA", если нажата клавиша A. Однако в моем обработчике событий JQuery keyup код свойства всегда неопределен:

$(document).on('keyup', function(e) {
    if(e.code === 'KeyA') // unfortunately always undefined
      console.log('Key "A" pressed');
});

Демонстрация:

$(document).on('keyup', function(e) {
  if (e.code === 'KeyA')
    console.log('Key "A" pressed');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<h1>KeyboardEvent code Property</h1>

<p>Press a key on the keyboard in this snippet.</p>

Что я делаю не так? Нет ли способа получить строковую константу «KeyA» из события клавиатуры JQuery?

Ответы [ 3 ]

2 голосов
/ 13 апреля 2020

event.code кажется, работает!

$(document).on('keyup', function(e) {
  if(e.originalEvent.code === 'KeyA')
    console.log('Key "A" pressed');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input/>
2 голосов
/ 13 апреля 2020

Объект события в вашем jQuery обработчике событий является объектом-оболочкой , созданным jQuery. Вы можете получить фактический объект события, сгенерированный браузером, из e.originalEvent. Похоже, что jQuery не предоставляет свойство "code" в своей оболочке.

Свойство "which" объекта события jQuery нормализуется библиотекой, так что оно надежно предоставляет код символа, соответствующий к ключу.

Связанная документация MDN указывает, что свойство originalEvent должно иметь свойство code, работающее, как описано , если вы используете браузер кроме Inte rnet Explorer. Фрагменты кода, добавленные в OP и в ответе или двух, показывают, что он работает, как описано для меня в Firefox.

0 голосов
/ 13 апреля 2020

Зачем усложнять жизнь?!
Вместо:

$(document).on('keyup', function(e) {
    if(e.code === 'KeyA') // unfortunately always undefined
      console.log('Key "A" pressed');
});

Попробуйте это:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
   $(document).on('keyup', function(e) {
      if(e.which == 65) // 65 is A's keycode.
         console.log('Key "A" pressed');
   });
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...