Javascript 跨浏览器键盘事件处理程序
我借用了一个按键处理程序,它过去可以跨浏览器工作,但现在不再适用于webkit浏览器。有人能提供如何修复的建议吗 以下是处理程序: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
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显然忽略了它。