event.keyCode - 写出兼容IE和Firefox的按键捕捉及识别代码

cyjsky 2013-04-21

在写Felix的javascript运行环境的时候

为了方便使用,Felix希望能够捕捉到CTRL+Enter按键作为运行的快捷键

以前写过forIE的代码,非常简单:

<script language="javascript">
function myKeyPress(){
  alert(event.keyCode);
}
</script>
<body onkeypress="myKeyPress()">
......

但是这样的代码在Firefox下根本不能运行,因为event不是Firefox的一个全局对象。

查了好多资料,终于明白了在Firefox下要这样写代码才行:

<script language="javascript">
function myKeyPress(evt){
  alert(evt.which);
}
</script>
<body onkeypress="myKeyPress(evt)">
......

但是很遗憾,这样的代码在IE下又不能运行——好吧,采取折衷方案如下:

<script language="javascript">
function myKeyPress(evt){
    evt = (evt) ? evt : ((window.event) ? window.event : "") //兼容IE和Firefox获得keyBoardEvent对象
    var key = evt.keyCode?evt.keyCode:evt.which; //兼容IE和Firefox获得keyBoardEvent对象的键值
    if(evt.ctrlKey && (key == 13 || key == 10)){ //同时按下了Ctrl和回车键
        //do something;
    }
}
</script>
<body onkeypress="myKeyPress(evt)">
......

于是代码终于可以在IE和Firefox运行了。

总结一下需要注意的地方:

1.取得keyBoardEvent对象

2.取得keyBoardEvent对象的键值

3.onkeypress="myKeyPress(event)"函数需要一个参数

以上很大一部分是参考了来自以下网页:

JavascriptMadness

该网页详细介绍了几个很容易令人发疯的兼容性问题。。。。

--

转载请注明出自http://www.felix021.com/blog/read.php?1171,如是转载文则注明原出处,谢谢:)

相关推荐