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

如何在javascript函数中处理箭头键和<(大于)?哪个事件和哪个代码(charcode或keycode)?

  •  2
  • SilverLight  · 技术社区  · 14 年前

    如何处理箭头键和 < (大于)在javascript函数中?哪个事件和哪个代码(charcode或keycode)?

    我很困惑该怎么做。我仔细阅读了这个链接, Events and keyCode+charCode 但我找不到任何解决方案。

    3 回复  |  直到 14 年前
        1
  •  5
  •   BalusC    14 年前

    使用 event.keyCode 就足够了。您只需要在获取密钥事件时考虑浏览器兼容性问题。

    下面是一个基本的启动示例,它捕获箭头键,复制粘贴,运行它:

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <title>SO question 3181648</title>
            <script>
                document.onkeydown = function(e) {
                    e = e || event; // "real browsers" || IE6/7.
                    switch (e.keyCode) {
                        case 37: alert('left'); break;
                        case 38: alert('up'); break;
                        case 39: alert('right'); break;
                        case 40: alert('down'); break;
                    }
                }
            </script>
        </head>
        <body>
           <p>Press one of the arrow keys.</p> 
        </body>
    </html>
    

    请注意,最好附加事件 this 方式或使用 jQuery .

    用于捕获按下的字符,如 < ,看一下 Tim's answer .

        2
  •  4
  •   Tim Down    14 年前

    检测非文本输入键(如箭头键)时,使用 keydown 事件是正确的方法。用于检测键入的字符,如 < ,使用 keypress 事件是唯一安全的方法。如果您使用 键盘按下 事件及其 keyCode 属性,这并不能保证在不同类型的键盘和浏览器上工作。

    如果您真的想了解JavaScript密钥处理,我推荐以下页面: http://unixpapa.com/js/key.html

    以下是您的需求示例:

    document.onkeydown = function(evt) {
        evt = evt || window.event;
        switch (evt.keyCode) {
            case 37: alert("left"); break;
            case 38: alert("up"); break;
            case 39: alert("right"); break;
            case 40: alert("down"); break;
        }
    };
    
    document.onkeypress = function(evt) {
        evt = evt || window.event;
        var charCode = evt.which || evt.keyCode;
        var charStr = String.fromCharCode(charCode);
        if (charStr == "<") {
            alert("<");
        }
    };
    
        3
  •  0
  •   Cheburek    14 年前
    <script type="text/javascript">
    var Keys = {
          BACKSPACE: 8,  TAB: 9,        ENTER: 13,     SHIFT: 16,
          CTRL: 17,      ALT: 18,       PAUSE: 19,     CAPS: 20,
          ESC: 27,       PAGEUP: 33,    PAGEDN: 34,    END: 35,
          HOME: 36,      LEFT: 37,      UP: 38,        RIGHT: 39,
          DOWN: 40,      INSERT: 45,    DELETE: 46,       
          n0: 48, n1: 49, n2: 50, n3: 51, n4: 52,
          n5: 53, n6: 54, n7: 55, n8: 56, n9: 57,
          A:65, B:66, C:67, D:68, E:68, F:70, G:71, H:72, I:73, J:74, K:75,
          L:76, M:77, N:78, O:79, P:80, Q:81, R:82, S:83, T:84, U:85, V:86,
          W:87, X:88, Y:89, Z:90,
          WINLEFT: 91,   WINRIGHT: 92,  SELECT: 93,    NUM0: 96,
          NUM1: 97,      NUM2: 98,      NUM3: 99,      NUM4: 100,
          NUM5: 101,     NUM6: 102,     NUM7: 103,     NUM8: 104,
          NUM9: 105,     MULTIPLY: 106, ADD: 107,      SUBTRACT: 109,
          DECIMAL: 110,  DIVIDE: 111,   F1: 112,       F2: 113,
          F3: 114,       F4: 115,       F5: 116,       F6: 117,
          F7: 118,       F8: 119,       F9: 120,       F10: 121,
          F11: 122,      F12: 123,      NUMLOCK: 144,  SCROLLLOCK: 145,
          SEMICOLON: 186,EQUAL: 187,    COMMA: 188,    DASH: 189,
          PERIOD: 190,   FORWARDSLASH: 191,            GRAVEACCENT: 192,
          OPENBRACKET: 219,             BACKSLASH: 220,
          CLOSEBRACKET: 221,            QUOTE: 222
    };
    
    /* true - will be handled also by default handler and for false - will not (if you wanna disable some keys) */
    function pressedKeyHandler(key){
         if (k != Keys.COMMA || k != Keys.DASH) return true;
         //handle pressed button here         
         return true; 
    }
    
    if (typeof window.event != 'undefined') // IE
      document.onkeydown = function() { return pressedKeyHandler(event.keyCode); }
    else   // FireFox/Opera/Others 
      document.onkeypress = function(e) { return pressedKeyHandler(e.keyCode); }
    
    </script>
    

    我可能是错的,但对我来说,最好是处理onkeydown事件,而不是onkeypress。

    推荐文章