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.三个事件的 ...
随机推荐
- Asp.net Core 缓存 MemoryCache 和 Redis
Asp.net Core 缓存 MemoryCache 和 Redis 目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 经过 N 久反复的尝试,翻阅了网上无数的资料,GitH ...
- C++统计代码注释行数 & 有效代码行数 & 代码注释公共行 & 函数个数
问题来源,在14年的暑假的一次小项目当中遇到了一个这样的问题,要求统计C++代码的注释行数,有效代码行数,代码注释公共行数,以及函数个数. 下面稍微解释一下问题, 1)注释行数:指有注释的行,包括有代 ...
- 一些我后写出来的awk脚本
mail.awk function mailByShell(receiver, sender, subject, content, __ARGVEND__, xhead, xfrom, xmime, ...
- FFT修正
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #inc ...
- 【转】Beagleboard:BeagleBoneBlack
原文网址:http://elinux.org/Beagleboard:BeagleBoneBlack Did you know that elinux.org has Mailing Lists? P ...
- ASP.NET MVC4.0 部署
EntifyFramework 5.0.0 安装 http://www.nuget.org/packages/EntityFramework/5.0.0 1. 文章,部署前的配置 http://www ...
- 基于jsp+servlet图书管理系统之后台用户信息删除操作
上一篇的博客写的是修改操作,且附有源码和数据库,这篇博客写的是删除操作,附有从头至尾写的代码(详细的注释)和数据库! 此次删除操作的源码和数据库:http://download.csdn.net/de ...
- Centos6 下启动httpd报错 Could not reliably determine the server's解决方法
在启动httpd的时候报错: 修改/etc/httpd/conf/httpd.conf 配置,去掉ServerName 前的#(或者手动添加ServerName localhost:80)然后重启ht ...
- Struts2属性驱动与模型驱动
为什么要使用属性驱动和模型驱动 struts2与struts很大的不同点在于,struts的execute方法提供了HttpServletRequest和HttpServletResponse方法在获 ...
- QML设计登陆界面
QML设计登陆界面 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:Qt5.2 说明: 用QML设计一个应用的登陆界面 ...