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,如是转载文则注明原出处,谢谢:)