keypress和keydown事件及keyCode和keyChar
二:keypress和keydown事件:
现只在IE10、chrome(版本 32.0.1700.107 m)、firefox(25.0.1)中测试了。
| IE8 | chrome | firefox | |
| $(document).keydown() | yes | yes | yes |
| $('window').keydown() | no | yes | yes |
| $('body').keydown() | no | yes | yes |
keypress的表现与上表一致。
不仅keypress和keydown得到的按键值不同,不同浏览器的返回值event.keyCode、event.charCode也不同:
| Q键 | q键 | Caps Lock键 | Tab键 | 左方向键 | 数字1键 | Enter键 | 空格键 | F5键 | |||||||||||
| key down |
key press |
key down |
key press |
key down |
key press |
key down |
key press |
key down |
key press |
key down |
key press |
key down |
key press |
key down |
key press |
key down |
key press |
||
| IE10 | keyCode | 81 | 81 | 81 | 113 | 20 | -- | 9 | -- | 37 | -- | 49 | 49 | 13 | 13 | 32 | 32 | 116 | -- |
| charCode | 0 | 81 | 0 | 113 | 0 | -- | 0 | -- | 0 | -- | 0 | 49 | 0 | 13 | 0 | 32 | 0 | -- | |
| chrome | keyCode | 81 | 81 | 81 | 113 | 20 | -- | 9 | 9 | 37 | -- | 49 | 49 | 13 | 13 | -- | 32 | 116 | -- |
| charCode | 0 | 81 | 0 | 113 | 0 | -- | 0 | 9 | 0 | -- | 0 | -- | 0 | 13 | -- | 32 | 0 | -- | |
| firefox | keyCode | 81 | 0 | 81 | 0 | 20 | -- | 9 | 9 | 37 | 37 | 49 | 0 | 13 | 13 | 32 | 0 | 116 | 116 |
| charCode | 0 | 81 | 0 | 113 | 0 | -- | 0 | 0 | 0 | 0 | 0 | 49 | 0 | 0 | 0 | 32 | 0 | 0 | |
(还有一个event.whice:A non-standard property, the hybrid of charCode and keyCode, with the sole purpose to confuse a developer.
But in the zoo of key events it also plays a good role. Particulary, it helps to get the character. )
还有一些属性:shiftKey, ctrlKey, altKey, metaKey,布尔类型的值,检测按键是否是shift、ctrl、alt、Command(Mac only).
可以看出对于keyCode:
keydown几乎对所有按键都有返回值,且对大小写字母的返回值相同;
kepress似乎对只对字母按键有返回值,且对大小写字母的返回值不一样.
关于keydown、keypress、keyup的区别,参考http://javascript.info/tutorial/keyboard-events,上面写的很详细,摘录如下:
对于keydown,任何按键事件都能触发它,并返回scan-code(按键本身固有的数字代码,所有同一个键的scan-code肯定相同);
对于keypress,只保证character keys(字符按键)事件能触发它,并返回char-code(按键的unicode字符,区分大小写按键,charCode只在keypress中返回。js中的str.charCodeAt() 方法就可返回指定位置的字符的 Unicode 编码)。
For all keys except ';', '=' and '-' different browsers use same key code.。
看了上面的表是不是觉得有点......,参考网页中还给出了keypress的事件代码
如何获取键入的字符值和数字值:
// only keypress event
function getChar(event) {
if (event.which == null) {
return String.fromCharCode(event.keyCode) // IE
} else if (event.which!=0 && event.charCode!=0) {
return String.fromCharCode(event.which) // the rest
} else {
return null // special key
}
}
测试IE10、chrome、firefox有效。
由于String.fromCharCode对special keys 会返回weird results.所有不能直接return String.fromCharCode(event.keyCode||event.charCode)。
如何获取包含特殊键在内的组合键:
以ctrl+e为例:
document.onkeydown = function(e) {
e = e || event;
if ((e.ctrlKey && e.keyCode == 'E'.charCodeAt(0)) ) {
//do something
}
由于keyCode对大小写字符返回的都是大写字母值,所以e.keyCode == 'E'.charCodeAt(0)对e和E都能识别。
测试IE10、chrome、firefox有效。(如果先按住E,再同时按ctrl,则都无效)
keypress和keydown事件及keyCode和keyChar的更多相关文章
- javascript 中 keyup、keypress和keydown事件
keyup.keypress和keydown事件都是有关于键盘的事件 1. keydown事件在键盘的键被按下的时候触发,keyup 事件在按键被释放的时候触发 keydown.keypress ...
- js keyup、keypress和keydown事件
js keyup.keypress和keydown事件都是有关于键盘的事件 当一个按键被pressed 或released在每一个现代浏览器中,都可能有三种客户端事件. keydown event k ...
- js keyup、keypress和keydown事件 详解
js keyup.keypress和keydown事件 详解 js keyup.keypress和keydown事件都是有关于键盘的事件 当一个按键被pressed 或released在每一个现代浏 ...
- 转载关于KeyPress和KeyDown事件的区别和联系
KeyDown:在控件有焦点的情况下按下键时发生. KeyPress:在控件有焦点的情况下按下键时发生. KeyUp:在控件有焦点的情况下释放键时发生. 1.KeyPress主要用来接收字母.数字等A ...
- C#学习笔记-KeyDown、KeyPress、KeyUp事件以及KeyCode、KeyData、KeyValue、KeyChar属性
本来没打算单独写的,但是在自己弄测试小程序的时候,越写发现不清楚的东西越多,所以实践又一次证明:纸上得来终觉浅,绝知此事要躬行! 直接贴代码了: //发生顺序:KeyDown->KeyPress ...
- js获取浏览器的keydown事件(附keycode码)
<script type="text/javascript" language=JavaScript charset="UTF-8"> docume ...
- C# 如何捕获键盘按钮和组合键以及KeyPress/KeyDown事件之间的区别 (附KeyChar/KeyCode值)
1. 首先将窗口属性KeyPreview设为true,如果属性对话框中找不到,就直接在代码里添加: 2. 添加KeyPress / KeyDown事件: 1.KeyPress 和KeyDown .Ke ...
- Winform下KeyDown,KeyPress,KeyUp事件的总结(转)
原文: http://www.cnblogs.com/xiashengwang/archive/2011/09/15/2578798.html 在winform程序中,经常会用到这几个事件用于控制数字 ...
- C#控件中的KeyDown、KeyPress 与 KeyUp事件浅谈
研究了一下KeyDown,KeyPress 和 KeyUp 的学问.让我们带着如下问题来说明: 1.这三个事件的顺序是怎么样的? 2.KeyDown 触发后,KeyUp是不是一定触发? 3.三个事件的 ...
随机推荐
- cocos2d(粒子效果编辑器)
ParticleDesigner for Mac下载地址:http://www.cocoachina.com/bbs/read.php?tid=108339 最近在做一款粒子编辑器 其实就是在co ...
- 转:MFC创建多线程实例
作者:http://blog.csdn.net/wangningyu/article/details/4404134 平时在MFC里使用多线程时其实是很方面的,因为微软提供了一个API让我们很方面的去 ...
- MFC的杂七杂八
1.判断焦点当前所在控件 2.动态移动控件位置 3.GDI+绘制文字 4.编辑框跳变显示 5.最大化显示 6.Uint uFormat常用值 7.获取菜单个数 8.添加气泡提示 9.编辑框输入时响应函 ...
- C++中基于Crt的内存泄漏检测(重载new和delete,记录在Map里)
尽管这个概念已经让人说滥了 ,还是想简单记录一下, 以备以后查询. #ifdef _DEBUG#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FIL ...
- Basic Printing Architecture
https://blogs.technet.microsoft.com/askperf/2007/06/19/basic-printing-architecture/ Printer sharing, ...
- puppet aix之自动化用户管理
一. 用户组的管理 (一) Puppet组管理特性 1. manages_aix_lam 用来管理AIX的LAM(Loadable Authentication Module)系统. 2 ...
- 写两个线程,一个对n每次加一,一个对n每次减一
public class A{ private static Integer n = 0; } public class B extends A implements Runnable ...
- Zabbix中文使用手册
一.Zabbix简介 详情参考“企业监控利器-zabbix”http://waringid.blog.51cto.com/65148/904201. 二.Zabbix使用 2.1 Zabbix框架介绍 ...
- Sequence(组合数学,集合不同元素的个数)
Sequence [组合数学] 时间限制: 3 Sec 内存限制: 128 MB 提交: 138 解决: 52 [提交][状态][讨论版] 题目描述 在某个夜黑月高的晚上,!!!,原谅我编不下去了 ...
- uploadify不能正确显示中文的按钮文本的解决办法
uploadify 目前不能正确显示中文的按钮文本. 我发现bug的原因是uploadify错误的使用了 js 的 escape 和 flash 的 unescape配对,而这2个是不兼容的.正确的转 ...