有三种按键事件类型:keydown,keypress,keyup。 一个典型的按键会产生所有的这三种事件,依次是keydown,keypress,keyup。
如果一个键被按下并自动重复,则可能有多个keypress事件。
不能打印的功能键 会产生keydown,keyup事件。在某些浏览器中也可能产生keypress事件。然而在IE中,只有按键有一个ASCII码的时候才会发生keypress事件。如方向键就不会触发keypress事件 ,但是会触发keydown事件。
如何获取按键的字符码 ?
- IE中只有keyCode属性,并且它的解释取决于事件的类型。对于keydown事件,keycode是一个虚拟按键码;对于keypress事件,keyCode是一个字符码。
- firefox中定义了两个属性keyCode和charCode。keyCode存储了一个按键的较低层次的虚拟按键码,并且和keydown事件一起发送。 charCode存储了按键所产生的可打印字符的编码,并且和keypress事件一起发送 。如果在firefox按下功能键,charCode为0,keyCode包含了虚拟按键码。在firefox中,可以通过evetn.which获取keyCode的值。
字符码可使用静态函数String.fromCharCode(value)转换为字符。
jquery中对按键事件进行了封装,可统计使用evetn.which获取字符码。
jquery中which不但可以判断键盘的键值,也可以判断鼠标的键值。
可以参考jquery源码的event.js部分
keyHooks: { props: "char charCode key keyCode".split(" "), filter: function( event, original ) { // Add which for key events if ( event.which == null ) { event.which = original.charCode != null ? original.charCode : original.keyCode; } return event; } }, mouseHooks: { props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "), filter: function( event, original ) { var eventDoc, doc, body, button = original.button; // Calculate pageX/Y if missing and clientX/Y available if ( event.pageX == null && original.clientX != null ) { eventDoc = event.target.ownerDocument || document; doc = eventDoc.documentElement; body = eventDoc.body; event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); } // Add which for click: 1 === left; 2 === middle; 3 === right // Note: button is not normalized, so don't use it if ( !event.which && button !== undefined ) { event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); } return event; } },
参考:http://www.cnblogs.com/sniper007/archive/2012/11/13/2767637.html
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于