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.三个事件的 ...
随机推荐
- Python交互模式下方向键出现乱码
解决办法如下: 1.安装readline模块 readline库是bash shell用的库,包含许多功能,如命令行自动补全等. ubuntu下安装的命令: sudo apt-get instal ...
- 《python基础教程》笔记之 字符串
字符串格式化 字符串格式化使用字符串格式化操作符即百分号%来实现.在%的左侧放置一个字符串(格式化字符串),而在右侧则放置希望格式化的值,可以使用一个值,如一个字符串或者数字,也可以使用多个值的元组或 ...
- Andriod手势密码破解
★ 引子 之前在Freebuf上看到一片文章讲Andriod的手势密码加密原理,觉得比较有意思,所以就写了一个小程序试试. ★ 原理 Android的手势密码加密原理很简单: 先 ...
- 信息安全实验一:buffer-overflow
title: buffer-overflow date: 2016-01-10 14:17:17 categories: information-security tags: buffer-overf ...
- OC学习篇之---通知(NSNotificationCenter)
在前一篇文章中我们介绍了OC中很常用的两个技术:KVC和KVO: http://blog.csdn.net/jiangwei0910410003/article/details/41912937,今天 ...
- [POJ] 3020 Antenna Placement(二分图最大匹配)
题目地址:http://poj.org/problem?id=3020 输入一个字符矩阵,'*'可行,'o'不可行.因为一个点可以和上下左右四个方向的一个可行点组成一个集合,所以对图进行黑白染色(每个 ...
- Go http.HandlerFunc()
//http.Handler type Handler interface { ServeHTTP(ResponseWriter, *Request) } type HandlerFunc func( ...
- BroadcastReceiver 案例
BroadcastReceiver 可以接收来自系统和应用的广播,他的生命周期非常简单,只是从对象开始调用他到运行onReceiver方法之后就结束了.要想使用BroadcastReceiver和使用 ...
- jsonp实现跨域资源访问
平时项目中处理ajax跨域资源请求时,例如www.example2.com上的某个页面要请求www.example1.com的数据,我们使用得较多的是jsonp方式.jsonp通过JavaScript ...
- linux 建库,编码,导入数据
二.导入数据库1.首先建空数据库mysql>create database abc; 2.导入数据库方法一:(1)选择数据库mysql>use abc;(2)设置数据库编码mysql> ...