代码之家  ›  专栏  ›  技术社区  ›  Mike

jQuery事件:keypress不适用于Firefox或IE,keyup不适用于IE[复制]

  •  0
  • Mike  · 技术社区  · 6 年前

    如何检测何时按下其中一个箭头键?我用这个发现:

    function checkKey(e) {
        var event = window.event ? window.event : e;
        console.log(event.keyCode)
    }
    

    虽然它适用于其他键,但它不适用于箭头键(可能是因为默认情况下浏览器应该滚动这些键)。

    0 回复  |  直到 7 年前
        1
  •  704
  •   jla    5 年前

    箭头键仅由 onkeydown ,不是 onkeypress

    关键代码是:

    • 向上=38
    • 右=39
        2
  •  214
  •   ketan    6 年前

    上下键调用函数。每个键都有不同的代码。

    document.onkeydown = checkKey;
    
    function checkKey(e) {
    
        e = e || window.event;
    
        if (e.keyCode == '38') {
            // up arrow
        }
        else if (e.keyCode == '40') {
            // down arrow
        }
        else if (e.keyCode == '37') {
           // left arrow
        }
        else if (e.keyCode == '39') {
           // right arrow
        }
    
    }
    
        3
  •  93
  •   1''    11 年前

    可能是最简单的公式:

    document.onkeydown = function(e) {
        switch (e.keyCode) {
            case 37:
                alert('left');
                break;
            case 38:
                alert('up');
                break;
            case 39:
                alert('right');
                break;
            case 40:
                alert('down');
                break;
        }
    };
    

    演示(感谢用户Angus Grant): http://jsfiddle.net/angusgrant/E3tE6/

    这应该可以跨浏览器工作。如果浏览器不工作,请留下评论。

    http://www.asquare.net/javascript/tests/KeyCode.html . 注意,event.keycode不适用于Firefox中的onkeypress,但适用于onkeydown。

        4
  •  82
  •   Gibolt    7 年前

    event.key==“向右箭头”。。。

    更新更干净:使用 event.key . 不再有任意数字代码!如果你正在传输或知道你的用户都在现代浏览器上,使用这个!

    node.addEventListener('keydown', function(event) {
        const key = event.key; // "ArrowRight", "ArrowLeft", "ArrowUp", or "ArrowDown"
    });
    

    详细处理:

    switch (event.key) {
        case "ArrowLeft":
            // Left pressed
            break;
        case "ArrowRight":
            // Right pressed
            break;
        case "ArrowUp":
            // Up pressed
            break;
        case "ArrowDown":
            // Down pressed
            break;
    }
    

    你可以很容易地扩展这个来检查 "w", "a", "s", "d" ,或任何其他键

    Mozilla Docs

    Supported Browsers

    附笔。 event.code 是一样的

        5
  •  19
  •   Tim Down    14 年前

    使用 keydown ,不是 keypress 对于箭头键等不可打印的键:

    function checkKey(e) {
        e = e || window.event;
        alert(e.keyCode);
    }
    
    document.onkeydown = checkKey;
    

    http://unixpapa.com/js/key.html

        6
  •  13
  •   Joshua Fan    8 年前

    现代答案自 keyCode 现在已弃用 key :

    document.onkeydown = function (e) {
        switch (e.key) {
            case 'ArrowUp':
                // up arrow
                break;
            case 'ArrowDown':
                // down arrow
                break;
            case 'ArrowLeft':
                // left arrow
                break;
            case 'ArrowRight':
                // right arrow
        }
    };
    
        7
  •  9
  •   kennebec    11 年前
    function checkArrowKeys(e){
        var arrs= ['left', 'up', 'right', 'down'], 
        key= window.event? event.keyCode: e.keyCode;
        if(key && key>36 && key<41) alert(arrs[key-37]);
    }
    document.onkeydown= checkArrowKeys;
    
        8
  •  8
  •   RobPW    10 年前

    var targetElement = $0 || document.body;
    
    function getArrowKeyDirection (keyCode) {
      return {
        37: 'left',
        39: 'right',
        38: 'up',
        40: 'down'
      }[keyCode];
    }
    
    function isArrowKey (keyCode) {
      return !!getArrowKeyDirection(keyCode);
    }
    
    targetElement.addEventListener('keydown', function (event) {
      var direction,
          keyCode = event.keyCode;
    
      if (isArrowKey(keyCode)) {
        direction = getArrowKeyDirection(keyCode);
    
        console.log(direction);
      }
    });
    
        9
  •  8
  •   lrhorer    6 年前

    我认为最新的方法是:

    document.addEventListener("keydown", function(event) {
      event.preventDefault();
      const key = event.key; // "ArrowRight", "ArrowLeft", "ArrowUp", or "ArrowDown"
      switch (key) { // change to event.key to key to use the above variable
        case "ArrowLeft":
          // Left pressed
          <do something>
          break;
        case "ArrowRight":
          // Right pressed
          <do something>
          break;
        case "ArrowUp":
          // Up pressed
          <do something>
          break;
        case "ArrowDown":
          // Down pressed
          <do something>
          break;
      }
    });
    

    这假设开发人员希望代码在页面上的任何地方都处于活动状态,而客户端应该忽略任何其他按键。如果按键(包括此处理程序捕获的按键)仍应处于活动状态,则删除event.preventDefault();行。

        10
  •  7
  •   OneStig    7 年前

    var leftKey = 37, upKey = 38, rightKey = 39, downKey = 40;
    var keystate;
    document.addEventListener("keydown", function (e) {
        keystate[e.keyCode] = true;
    });
    document.addEventListener("keyup", function (e) {
        delete keystate[e.keyCode];
    });
    
    if (keystate[leftKey]) {
    //code to be executed when left arrow key is pushed.
    }
    if (keystate[upKey]) {
    //code to be executed when up arrow key is pushed.
    }
    if (keystate[rightKey]) {
    //code to be executed when right arrow key is pushed.
    }
    if (keystate[downKey]) {
    //code to be executed when down arrow key is pushed.
    }
    
        11
  •  5
  •   Albireo    14 年前

    我可以用jQuery捕获它们:

    $(document).keypress(function (eventObject) {
        alert(eventObject.keyCode);
    });
    

    例如: http://jsfiddle.net/AjKjU/

        12
  •  4
  •   Zeeshan Akhter    11 年前

    <html>
    <head>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
    
    <script type="text/javascript">
    
        function leftArrowPressed() {
          alert("leftArrowPressed" );
          window.location = prevUrl  
        }
    
        function rightArrowPressed() {
          alert("rightArrowPressed" );
          window.location = nextUrl  
        }
        function topArrowPressed() {
          alert("topArrowPressed" );
          window.location = prevUrl  
        }
    
        function downArrowPressed() {
          alert("downArrowPressed" );
          window.location = nextUrl  
        }
    
            document.onkeydown = function(evt) {
                            var nextPage = $("#next_page_link")
                            var prevPage = $("#previous_page_link")
                            nextUrl = nextPage.attr("href")
                            prevUrl = prevPage.attr("href")
            evt = evt || window.event;
            switch (evt.keyCode) {
                    case 37:
                    leftArrowPressed(nextUrl);
                    break;
    
                    case 38:
                    topArrowPressed(nextUrl);
                    break;
    
                     case 39:
                    rightArrowPressed(prevUrl);
                    break;
    
                    case 40:
                    downArrowPressed(prevUrl);
                    break;
    
            }
        };
    
    
    </script>
    </head>
    <body>
    <p>
    <a id="previous_page_link" href="http://www.latest-tutorial.com">Latest Tutorials</a> 
    <a id="next_page_link" href="http://www.zeeshanakhter.com">Zeeshan Akhter</a>
     </p>
    </body>
    </html>
    
        13
  •  3
  •   iConnor    11 年前

    我也一直在寻找这个答案,直到我看到这个帖子。

    只需使用keyup/keydown事件在控制台/警报中写入值 event.keyCode

    console.log(event.keyCode) 
    
    // or
    
    alert(event.keyCode)
    

    -鲁帕姆

        14
  •  3
  •   Andrey Vaganov    10 年前

    function IsArrows (e) { return (e.keyCode >= 37 && e.keyCode <= 40); }

        15
  •  2
  •   Naveed S    12 年前

    你需要的答案 keydown keypress .

    假设你想在按键时连续移动某物,我发现 适用于除Opera以外的所有浏览器。对于歌剧, 键盘按下

    document.onkeydown = checkKey;
    document.onkeypress = checkKey;
    function checkKey(e)
    { etc etc
    
        16
  •  2
  •   Fandi Susanto    8 年前

    这个图书馆太棒了! https://craig.is/killing/mice

    Mousetrap.bind('up up down down left right left right b a enter', function() {
        highlight([21, 22, 23]);
    });
    

    不过,您需要快速按顺序以突出显示该页中的代码。

        17
  •  1
  •   Kalyan Halder    5 年前

    如果您使用jquery,那么您也可以这样做,

     $(document).on("keydown", '.class_name', function (event) {
        if (event.keyCode == 37) {
            console.log('left arrow pressed');
        }
        if (event.keyCode == 38) {
            console.log('up arrow pressed');
        }
        if (event.keyCode == 39) {
            console.log('right arrow pressed');
        }
        if (event.keyCode == 40) {
            console.log('down arrow pressed');
        }
     });
    
        18
  •  1
  •   batMan007    5 年前

    弹起

    $(document).on("keyup", "body", function(e) {
     if (e.keyCode == 38) {
        // up arrow
        console.log("up arrow")
      }
      if (e.keyCode == 40) {
          // down arrow
          console.log("down arrow")
      }
      if (e.keyCode == 37) {
        // left arrow
        console.log("lefy arrow")
      }
      if (e.keyCode == 39) {
        // right arrow
        console.log("right arrow")
      }
    })
    

    onkeydown允许ctrl,alt,shits

        19
  •  0
  •   MWiesner    8 年前

    控制按键代码 %=37 &=38 ... 只有左箭头键=37向上=38

    function IsArrows (e) {
       return ( !evt.shiftKey && (e.keyCode >= 37 && e.keyCode <= 40)); 
    }
    
        20
  •  0
  •   KitKit    6 年前

    function checkKey(e) {
       if (e.keyCode !== 38 || e.keyCode !== 40 || e.keyCode !== 37 || e.keyCode !== 39){
        // do something
       };
    }
    
        21
  •  -1
  •   volt    5 年前

    key 和ES6。

    NumLock 正在打开。

    const element = document.querySelector("textarea"),
      ArrowRight = k => {
        console.log(k);
      },
      ArrowLeft = k => {
        console.log(k);
      },
      ArrowUp = k => {
        console.log(k);
      },
      ArrowDown = k => {
        console.log(k);
      },
      handler = {
        ArrowRight,
        ArrowLeft,
        ArrowUp,
        ArrowDown
      };
    
    element.addEventListener("keydown", e => {
      const k = e.key;
    
      if (handler.hasOwnProperty(k)) {
        handler[k](k);
      }
    });
    <p>Click the textarea then try the arrows</p>
    <textarea></textarea>