跨浏览器键盘事件处理程序

时间:2011-05-17 16:14:08

标签: javascript cross-browser keyboard-events

我有一个我借用的按键处理程序,它曾用于浏览器,但现在不再适用于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 :(得分:0)

如果你配对一个规范化charCode / keyCode差异的JS库,并将它与专用于键盘输入的插件一起使用,那么你应该很清楚。

我已将jQueryHotKeys Plugin一起使用。但是,您也可以使用shortcut keyboard handling而不使用jQuery(HotKeys插件所基于的)。

我非常喜欢这些提供的键盘快捷键功能 - 但是应该注意某些键盘组合可能会触发(或者用户可能会指望它们触发)特定浏览器中的某些操作。

E.g。您可以捕获[CTRL] + [A]键盘组合,但如果您阻止选择所有文本 - 我可以看到用户非常恶化。