js 判断键盘事件大全(兼容FireFox和IE,包括退格、回车、空格、方向键、删除键等)

发布时间:2019-11-29编辑:脚本学堂
为大家介绍js键盘事件全面控制(兼容FireFox和IE)的方法,难得一遇的好文章,有需要的朋友,千万不要错过。脚本学堂,为大家收集整理。

三、代码实现和优化

3.1 按键事件的按键码和字符码

在IE中,只有一个keyCode属性,并且它的解释取决于事件类型。对于keydown来说,keyCode存储的是按键码,对于 keypress事件来说,keyCode存储的是一个字符码。而IE中没有which和charCode属性,所以which和charCode属性始终为undefined。

FireFox中keyCode始终为0,时间keydown/keyup时,charCode=0,which为按键码。事件keypress时,which和charCode二者的值相同,存储了字符码。

在Opera中,keyCode和which二者的值始终相同,在keydown/keyup事件中,它们存储按键码,在keypress时间中,它们存储字符码,而charCode没有定义,始终是undefined。

3.2 用keydown/keyup还是keypress
第一部分已经介绍了keydown/keyup和keypress的区别,有一条比较通用的规则,keydown事件对于功能按键来说是最有用的,而keypress事件对于可打印按键来说是最有用的[3]。
键盘记录主要是针对于可打印字符和部分功能按键,所以keypress是首选,然而正如第一部分提到的,IE中keypress不支持功能按键,所以应该用keydown/keyup事件来进行补充。

3.3 代码的实现
总体思路,用keypress事件对象获取按键字符,用keydown事件获取功能字符,如Enter,Backspace等。
 

复制代码 代码示例:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD><TITLE>js 按键记录</TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="羽殇仁">
<META NAME="Keywords" CONTENT="js 按键记录">
<META NAME="Description" CONTENT="js 按键 记录">
</HEAD>
<BODY>
<script type="text/javascript">
var keystring = "";//记录按键的字符串
function $(s){return document.getElementById(s)?document.getElementById(s):s;}
function keypress(e)
{
  var currKey=0,CapsLock=0,e=e||event;
    currKey=e.keyCode||e.which||e.charCode;
  CapsLock=currKey>=65&&currKey<=90;
  switch(currKey)
  {
       //屏蔽了退格、制表、回车、空格、方向键、删除键
       case 8: case 9:case 13:case 32:case 37:case 38:case 39:case 40:case 46:keyName = "";break;
       default:keyName = String.fromCharCode(currKey); break;
  }
  keystring += keyName;
}
function keydown(e)
{
  var e=e||event;
  var currKey=e.keyCode||e.which||e.charCode;
  if((currKey>7&&currKey<14)||(currKey>31&&currKey<47))
  {
      switch(currKey)
       {
          case 8: keyName = "[退格]"; break;
          case 9: keyName = "[制表]"; break;
          case 13:keyName = "[回车]"; break;
          case 32:keyName = "[空格]"; break;
          case 33:keyName = "[PageUp]";   break;
          case 34:keyName = "[PageDown]";   break;
          case 35:keyName = "[End]";   break;
          case 36:keyName = "[Home]";   break;
          case 37:keyName = "[方向键左]";   break;
          case 38:keyName = "[方向键上]";   break;
          case 39:keyName = "[方向键右]";   break;
           case 40:keyName = "[方向键下]";   break;
          case 46:keyName = "[删除]";   break;
          default:keyName = "";    break;
      }
      keystring += keyName;
  }
  $("content").innerHTML=keystring;
}
function keyup(e)
{
  $("content").innerHTML=keystring;
}
document.onkeypress=keypress;
document.onkeydown =keydown;
document.onkeyup =keyup;
</script>
<input type="text" />
<input type="button" value="清空记录" onclick="$('content').innerHTML = '';keystring = '';"/>
<br/>请按下任意键查看键盘响应键值:<span id="content"></span>
</BODY>
</HTML>

代码分析:
$():根据ID获取dom
keypress(e):实现对字符码的截获,由于功能按键要用keydown获取,所以在keypress中屏蔽了这些功能按键。
keydown(e):主要是实现了对功能按键的获取。
keyup(e):展示截获的字符串。

四、总结

编写代码的最初目的是能够通过js记录按键,并返回一个字符串。

上述代码只是用js实现了基本的英文按键记录,对于汉字是无能为力,记录汉字,我能想到的办法,当然是用js,是用keydown和keyup记录底层按键事件,汉字解析当然无能为力。当然你可以用DOM的方式直接获取input中的汉字,但这已经离开了本文讨论的用按键事件实现按键记录的本意。

上述代码还可以实现添加剪切板的功能,监控删除的功能等等。

实例介绍:

1、JavaScript 方法:
示例1:
只要你定义了这些键的动作,你在浏览器里按下这些键就会响应,兼容目前所有浏览器。
 

复制代码 代码示例:
<script type="text/javascript" language=JavaScript charset="UTF-8">
document.onkeydown=function(event){
 var e = event || window.event || arguments.callee.caller.arguments[0];
 if(e && e.keyCode==27){ // 按 Esc
     //要做的事情
   }
 if(e && e.keyCode==113){ // 按 F2
      //要做的事情
    }
  if(e && e.keyCode==13){ // enter 键
      //要做的事情
 }
        };
</script>

示例2:
 

复制代码 代码示例:
<script type="text/javascript" language=JavaScript charset="UTF-8">
    document.onkeydown=function(event){
        e = event ? event :(window.event ? window.event : null);
        if(e.keyCode==13){
 //执行的方法 
 alert('回车检测到了');
        }
    }
</script>

示例3:
 

复制代码 代码示例:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head>
<title>Check Score-www.jb200.com</title>
<script language="JavaScript"><!-- 
    function keyLogin(){ 
        if (event.keyCode==13)   //回车键的键值为13  
  document.getElementById("input").click(); //调用登录按钮的登录事件  
        } 
// -->
</script>  
</head> 
<body onkeydown="keyLogin();"> 
  <input type="text" /> 
  <input id="input" value="登录" type="button" onclick="alert('调用成功!')/>
</body> 
</html>

2、jquery 方法:
 

复制代码 代码示例:
<script>
    $(document).ready(function(){
        $("按下回车的控件").keydown(function(e){
 var curKey = e.which;
 if(curKey == 13){
     $("#回车事件按钮控件").click();
     return false;
 }
        });
    });
</script>