当前位置: 代码迷 >> 综合 >> 键盘事件event.keyCode ,event.which ,event.charCode
  详细解决方案

键盘事件event.keyCode ,event.which ,event.charCode

热度:45   发布时间:2023-12-15 21:15:08.0

javascript判断是否按回车键

<input id="chatMsg" name="chatMsg" type="text" size="90" οnkeypress="enterHandler(event);"/>

 

function enterHandler(event)

{ //获取用户单击键盘的“键值”

var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;

//如果是回车键

if (keyCode == 13){

sendRequest();}

}


onkeyup,onkeydown,onkeypress
在使用JavaScript做WEB键盘事件侦听捕获时,主要采用onkeypress、onkeydown、onkeyup三个事件进行出来。该三个事件的执行顺序如下:onkeydown > onkeypress >onkeyup。在一般情况下,采用三种键盘事件均可对键盘输入进行有效的响应。当在实际使用中,会发现这几者有些不同的差别。   


键盘事件包括keydown、kepress和keyup三种,每次敲击键盘都会(依次?)触发这三种事件:


 
       1、keypress事件不能对系统功能键(例如:后退、删除等,其中对中文输入法不能有效响应)进行正常的响应,keydown和onkeyup均可以对系统功能键进行有效的拦截,但事件截获的位置不同,可以根据具体的情况选择不同的键盘事件;


 
       2、keypress事件的keyCode对字母的大小写敏感,而keydown、keyup事件不敏感;


3、keypress事件的keyCode无法区分主键盘上的数字键和副键盘数字键的,而keydown、keyup的keyCode对主副键盘的数字键敏感。


        keydown和keyup是比较低级的接近于硬件的事件,通俗的理解是这两个事件可以捕获到你敲击了键盘中某个键;而keypress是相对于字符层面的较为高级点的事件,这个事件能够捕捉到你键入了哪个字符。可以这样理解,如果你敲击了A键,keydown和keyup事件只是知道你敲击了A键,它并不知道你敲的是大写的A(你同时按下了Shift键)还是敲的是小写a,它是以"键"为单位,你敲入了大写的A,它只是当成你敲下了shift和A两个键而已,但是keypress可以捕捉到你是敲入的大写的A还是小写的a.   
  
        在介绍Prototype中Event对象前先介绍一下浏览器中的事件模型,浏览器中的事件主要有HTML事件、鼠标事件和键盘事件,前两种事件比较好理解,这里主要解释一下键盘事件以及它在IE和firefox中的区别.   
  
        还要理解一个概念是键盘中的键分为字符(可打印)键和功能键(不可打印),功能键包括Backspace, Enter, Escape, the arrow keys, Page Up, Page Down, and F1 through F12 等   
  
        下面说一下键盘事件的具体使用方法,   
  
        键盘事件的event对象中包含一个keyCode属性,IE中只有这一个属性,当为keydown和keyup 事件是,keycode属性表示你具体按下的键(也称为virtual keycode),当捕捉的是keypress事件时keyCode属性指的是你键入的字符(character code)   
  
        在firefox中情况有些不同,event对象包含一个keyCode属性和一个charCode属性,keydown和keyup事件的时候,keyCode表示的就是你具体按的键,charCode为0;当捕捉的是keypress事件时,keyCode为0,charCode指的是你按下的字符   
  
        注意:功能键不会触发keypress事件,因为keypress对应的就是可打印的字符,但是有一点IE和FF 中的区别,你按下一个字符键的同时按下alt键,在IE中不触发keypress事件,但是在FF中可触发,我发现在IE中按下ctrl键的时候只有按下q键会触发事件其他的要么不会触发事件,要么被浏览器IE自身捕获了,例如你按下ctrl_A,全选某个东西,你按ctrl_S保存文件,但是在FF中就好多了,事件都是先传递到网页,再向外传递   
  
        鉴于IE和FF中的区别,如果你比较懒的话,建议只使用keydow和keyup事件,这两种事件的使用在IE和FF中基本上没有区别,也不要捕获ctrl_A等被浏览器定义为快捷键的事件   

        键盘事件event对象还有三个其他的属性altKey, ctrlKey, and shiftKey 来判断你按下一个键的时候是否按下了alt等键,这三个属性使用比较简单,三种事件都可以使用,也不存在IE和FF的兼容性问题


Netscape/Firefox/Opera中不支持 window.event.keyCode,需要用event.which代替,IE用event.keCode方法获取当前被按下的键盘按键值,而NetScape/FireFox/Opera用的则是event.which。

event.which属性的返回值是Number类型,返回触发当前事件时按下的键盘按键或鼠标按钮。

mousedownmouseup事件中,event.which属性返回的是对应鼠标按钮的映射代码值(相当于event.which)

keypress事件中,event.which属性返回的是输入的字符的Unicode值(相当于event.charCode)

keydownkeyup事件中,event.which属性返回的是对应按键的映射代码值(相当于evenet,keyCode)

验证代码:(链接:http://www.jquery123.com/keypress/)

<!DOCTYPE html>
<html>
<head><style>
fieldset { margin-bottom: 1em; }
input { display: block; margin-bottom: .25em; }
#print-output {width: 100%;
}
.print-output-line {white-space: pre;padding: 5px;font-family: monaco, monospace;font-size: .7em;
}</style><script src="http://cdn.bootcss.com/jquery/1.11.2/jquery.min.js"></script>
</head>
<body><form><fieldset><label for="target">Type Something:</label><input id="target" type="text" /></fieldset>
</form>
<button id="other">Trigger the handler
</button>
<script src="http://api.jquery.com/resources/events.js"></script><script>
var xTriggered = 0;
$("#target").keypress(function(event) {//keydown、keyup验证方法相同if ( event.which == 13 ) {event.preventDefault();}xTriggered++;var msg = "Handler for .keypress() called " + xTriggered + " time(s).";$.print( msg, "html" );$.print( event );
});$("#other").click(function() {$("#target").keypress();
});</script></body>
</html>



  相关解决方案