Кросс-браузерный обработчик событий клавиатуры - PullRequest
0 голосов
/ 17 мая 2011

У меня есть заимствованный обработчик нажатия клавиш, который раньше работал в разных браузерах, но теперь больше не работает в браузерах webkit. Может кто-нибудь предложить предложения, как исправить?

Вот обработчик:

function handleKeys(e) {
    //credit: http://santrajan.blogspot.com/2007/03/cross-browser-keyboard-handler.html
    var character;
    var evt = (e) ? e : window.event;       //IE reports window.event not arg
    if (evt.type == "keydown") {
        character = evt.keycode;
        if (character < 16 ||                    // non printables
            (character > 16 && character < 32) ||     // avoid shift
            (character > 32 && character < 41) ||     // navigation keys
            character == 46) {                   // Delete Key (Add to these if you need)
            handleNonChar(character);            // function to handle non Characters
            nonChar = true;
        } else
            nonChar = false;
    } else {                                // This is keypress
        if (nonChar) return;                // Already Handled on keydown
        character = (evt.charCode) ?
                   evt.charCode : evt.keyCode;
        if (character > 31 && character < 256)        // safari and opera
            handleChar(character);               //
    }
}

Обработчик вызывается на страницах так:

<script>
document.onkeydown = function(e) {handleKeys(e)}
document.onkeypress = function(e) {handleKeys(e)}
var nonChar = false;
</script>

Спасибо!

Тим

1 Ответ

0 голосов
/ 17 мая 2011

Если вы создадите пару JS-библиотеки, которая будет нормализовать различия charCode / keyCode, и будете использовать ее вместе с плагином, предназначенным для ввода с клавиатуры, вы должны разобраться очень хорошо.

Я использовал jQuery с плагином HotKeys .Однако вы также можете использовать комбинацию клавиш без jQuery (на которой основан плагин HotKeys).

Мне очень нравится функциональность сочетаний клавиш, предоставляемая этими функциями - однако следует отметить, чточто определенные комбинации клавиш могут вызывать (или пользователь может ожидать их срабатывания) определенные действия в определенном браузере.

Например, вы можете захватить комбинацию клавиш [CTRL] + [A], но если вы заблокируете ее, выделив весь текст- Я вижу, что пользователь сильно раздражен.

...