Can all keycode events be recognized by a user-script Jquery

人走茶凉 提交于 2019-12-10 18:24:31

问题


I am building a userscript with Tampermonkey that recognizes keycode events and when the key is fired it will do a function.

for eg. I want to press Enter and its keycode is 13 so I used this code

$(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");
}
});

The code works fine with Enter and with 1 but doesn't work with Ctrl nor Shift and other keys.

Is there any thing I am missing or not all key events can be handled?

NOTE : I have been using this link to get my keycodes and using them in my script.


回答1:


keypress isn't triggered for control key. Per the description on Mozilla docs:

The keypress event is fired when a key that produces a character value is pressed down. Examples of keys that produce a character value are alphabetic, numeric, and punctuation keys. Examples of keys that don't produce a character value are modifier keys such as Alt, Shift, Ctrl, or Meta.

One way to get around is to listen to keydown or keyup event:

$(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>



回答2:


To determine left and right ctrl, alt, and shift keys also :

$(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();
      }
});

You have to include jquery

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


来源:https://stackoverflow.com/questions/51394664/can-all-keycode-events-be-recognized-by-a-user-script-jquery

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!