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

Javascript 跨浏览器键盘事件处理程序,javascript,cross-browser,keyboard-events,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 rep

我借用了一个按键处理程序,它过去可以跨浏览器工作,但现在不再适用于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);               //
    }
}
功能手柄键(e){
//学分:http://santrajan.blogspot.com/2007/03/cross-browser-keyboard-handler.html
var特征;
var evt=(e)?e:window.event;//IE报告window.event而不是arg
如果(evt.type==“按下键”){
字符=evt.keycode;
if(字符<16 | |//不可打印
(字符>16&&字符<32)| |//避免移位
(字符>32&&character<41)| |//导航键
character==46){//Delete键(如果需要,可以添加到这些键中)
handleNonChar(character);//处理非字符的函数
nonChar=true;
}否则
nonChar=false;
}否则{//这是按键
if(nonChar)return;//已在keydown上处理
character=(evt.charCode)?
evt.charCode:evt.keyCode;
if(character>31&&character<256)//狩猎和歌剧
汉德莱卡尔(性格)//
}
}
在如下页面中调用处理程序:

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

document.onkeydown=函数(e){handleKeys(e)}
document.onkeypress=函数(e){handleKeys(e)}
var nonChar=false;
谢谢


Tim

如果你将一个JS库与之配对,使charCode/keyCode差异标准化,并将其与一个专用于键盘输入的插件结合使用,你应该能很好地理解

我已经用过了。但是,您也可以使用WithonjQuery(热键插件基于它)

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


例如,你可以捕获一个
[CTRL]+[a]
键盘组合,但如果你阻止它选择所有文本,我可以看到用户非常恼火。

对我有效(Chrome),除了你没有发布
handleNonChar
/
handleChar
:。你试过jQuery.keypresS()在webkit浏览器上是否有效吗?如果是的话,我会使用它。我认为pimvdb已经有了一些进展——我意识到没有定义handleNonChar()来阻止Webkit,但Mozilla显然忽略了它。