Могут ли все события кода клавиши распознаваться пользовательским скриптом Jquery

Я создаю пользовательский скрипт с Tampermonkey, который распознает события кода клавиши, и когда клавиша запускается, она выполняет функцию.

для например. Я хочу нажать Enter, а его keycode равно 13, поэтому я использовал этот код

$(document).keypress(function(event){
var which = (event.which ? event.which : event.keyCode);
if(which == '13'){
    alert("You Pressed Enter key");
}
else if(which == '17'){
    alert("You Pressed Control key");
}
});

Код отлично работает с Enter и с 1, но не работает с Ctrl, Shift и другими клавишами.

Есть ли что-то, что мне не хватает, или не все ключевые события могут быть обработаны?

ПРИМЕЧАНИЕ. Я использовал эту ссылку, чтобы получить коды клавиш и использовать их в своем скрипте. .


person Youssof H.    schedule 18.07.2018    source источник


Ответы (2)


keypress не запускается для клавиши управления. Согласно описанию в документах Mozilla:

Событие keypress запускается, когда нажимается клавиша, создающая символьное значение. Примерами клавиш, которые производят символьное значение, являются буквенные, цифровые и пунктуационные клавиши. Примерами клавиш, которые не создают символьного значения, являются клавиши-модификаторы, такие как Alt, Shift, Ctrl или Meta.

Один из способов обойти это — прослушать событие keydown или keyup:

$(document).keydown(function(event) {
  var which = (event.which ? event.which : event.keyCode);
  if (which == '13') {
    alert("You Pressed Enter key");
  } else if (which == '17') {
    alert("You Pressed Control key");
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

person 31piy    schedule 18.07.2018

Чтобы определить левую и правую клавиши ctrl, alt и shift, также:

$(document).keyup(function (e) {
      if (e.keyCode == 16) {
          if (e.originalEvent.location == 1)
              alert('Left SHIFT pressed.');
          else
              alert('Right SHIFT pressed.');
      } else if (e.keyCode == 17) {
          if (e.originalEvent.location == 1)
              alert('Left CTRL pressed.');
          else
              alert('Right CTRL pressed.');
      } else if (e.keyCode == 18) {
          if (e.originalEvent.location == 1)
              alert('Left ALT pressed.');
          else
              alert('Right ALT pressed.');
          e.preventDefault();
      }
});

Вы должны включить jquery

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
person Md. Khairul Hasan    schedule 18.07.2018