jQuery Keypress Arrow Keys

前端 未结 6 1119
自闭症患者
自闭症患者 2020-11-28 05:30

I\'m attempting to capture arrow key presses in jQuery, but no events are being triggered.

$(function(){
    $(\'html\').keypress(function(e){
        consol         


        
相关标签:
6条回答
  • 2020-11-28 05:52

    Please refer the link from JQuery

    http://api.jquery.com/keypress/

    It says

    The keypress event is sent to an element when the browser registers keyboard input. This is similar to the keydown event, except that modifier and non-printing keys such as Shift, Esc, and delete trigger keydown events but not keypress events. Other differences between the two events may arise depending on platform and browser.

    That means you can not use keypress in case of arrows.

    0 讨论(0)
  • 2020-11-28 05:53
    left = 37,up = 38, right = 39,down = 40
    
    $(document).keydown(function(e) {
    switch(e.which) {
        case 37:
        $( "#prev" ).click();
        break;
    
        case 38:
        $( "#prev" ).click();
        break;
    
        case 39:
        $( "#next" ).click();
        break;
    
        case 40:
        $( "#next" ).click();
        break;
    
        default: return;
    }
    e.preventDefault();
    

    });

    0 讨论(0)
  • 2020-11-28 05:57

    You can check wether an arrow key is pressed by:

    $(document).keydown(function(e){
        if (e.keyCode > 36 && e.keyCode < 41) 
          alert( "arrowkey pressed" );          
    });
    

    jsfiddle demo

    0 讨论(0)
  • 2020-11-28 06:02

    You should use .keydown() because .keypress() will ignore "Arrows", for catching the key type use e.which

    Press the result screen to focus (bottom right on fiddle screen) and then press arrow keys to see it work.

    Notes:

    1. .keypress() will never be fired with Shift, Esc, and Delete but .keydown() will.
    2. Actually .keypress() in some browser will be triggered by arrow keys but its not cross-browser so its more reliable to use .keydown().

    More useful information

    1. You can use .which Or .keyCode of the event object - Some browsers won't support one of them but when using jQuery its safe to use the both since jQuery standardizes things. (I prefer .which never had a problem with).
    2. To detect a ctrl | alt | shift | META press with the actual captured key you should check the following properties of the event object - They will be set to TRUE if they were pressed:
      • event.ctrlKey - ctrl
      • event.altKey - alt
      • event.shiftKey - shift
      • event.metaKey - META ( Command ⌘ OR Windows Key )
    3. Finally - here are some useful key codes ( For a full list - keycode-cheatsheet ):

      • Enter: 13
      • Up: 38
      • Down: 40
      • Right: 39
      • Left: 37
      • Esc: 27
      • SpaceBar: 32
      • Ctrl: 17
      • Alt: 18
      • Shift: 16
    0 讨论(0)
  • 2020-11-28 06:08
    $(document).on( "keydown",  keyPressed);
    
    function keyPressed (e){
        e = e || window.e;
        var newchar = e.which || e.keyCode;
        alert(newchar)
    }
    
    0 讨论(0)
  • 2020-11-28 06:16
    $(document).keydown(function(e) {
        console.log(e.keyCode);
    });
    

    Keypress events do detect arrow keys, but not in all browsers. So it's better to use keydown.

    These are keycodes you should be getting in your console log:

    • left = 37
    • up = 38
    • right = 39
    • down = 40
    0 讨论(0)
提交回复
热议问题