Как я могу обработать ArrowKeys и <(больше чем) в функции Javascript?Какое событие и какой код (charCode или keyCode)? - PullRequest
2 голосов
/ 05 июля 2010

Как я могу обработать ArrowKeys и < (больше, чем) в функции Javascript?Какое событие и какой код (charCode или keyCode)?

Я очень запутался, как это сделать.Я очень внимательно прочитал эту ссылку, Events и keyCode + charCode , но не смог найти никакого решения для своего сценария.

Ответы [ 3 ]

5 голосов
/ 05 июля 2010

Использование event.keyCode достаточно.Вам нужно только решить проблемы совместимости браузера с учетом получения ключевого события.

Вот базовый пример запуска, который захватывает клавиши со стрелками, copy'n'paste'n'run it:

<!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>

Обратите внимание, что прикрепление событий лучше сделать этим способом или используя jQuery .

Для захвата нажатых символов, таких как <, посмотрите Ответ Тима .

4 голосов
/ 06 июля 2010

При обнаружении нетекстовой клавиши ввода, такой как клавиша со стрелкой, использование события keydown является правильным подходом.Для обнаружения напечатанного символа, такого как <, использование события keypress является единственным безопасным подходом.Если вместо этого вы используете событие keydown и его свойство 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("<");
    }
};
0 голосов
/ 05 июля 2010
<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>

Я могу ошибаться, но, похоже, для IE лучше обрабатывать событие onkeydown, чем onkeypress.

...