二: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  49  0  13   32  0 -- 
chrome keyCode 81 81 81 113 20 -- 9 9 37 -- 49 49 13 13 -- 32 116 --
charCode 81   113  0 --   0  9 --   0 --   13  --  32  -- 
firefox keyCode 81 0 81 0 20 -- 9 9 37 37    49  0 13 13 32 0 116 116
charCode  0 81   113 --   0  0  0 49   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的更多相关文章

  1. javascript 中 keyup、keypress和keydown事件

    keyup.keypress和keydown事件都是有关于键盘的事件 1. keydown事件在键盘的键被按下的时候触发,keyup 事件在按键被释放的时候触发    keydown.keypress ...

  2. js keyup、keypress和keydown事件

    js keyup.keypress和keydown事件都是有关于键盘的事件 当一个按键被pressed 或released在每一个现代浏览器中,都可能有三种客户端事件. keydown event k ...

  3. js keyup、keypress和keydown事件 详解

    js keyup.keypress和keydown事件  详解 js keyup.keypress和keydown事件都是有关于键盘的事件 当一个按键被pressed 或released在每一个现代浏 ...

  4. 转载关于KeyPress和KeyDown事件的区别和联系

    KeyDown:在控件有焦点的情况下按下键时发生. KeyPress:在控件有焦点的情况下按下键时发生. KeyUp:在控件有焦点的情况下释放键时发生. 1.KeyPress主要用来接收字母.数字等A ...

  5. C#学习笔记-KeyDown、KeyPress、KeyUp事件以及KeyCode、KeyData、KeyValue、KeyChar属性

    本来没打算单独写的,但是在自己弄测试小程序的时候,越写发现不清楚的东西越多,所以实践又一次证明:纸上得来终觉浅,绝知此事要躬行! 直接贴代码了: //发生顺序:KeyDown->KeyPress ...

  6. js获取浏览器的keydown事件(附keycode码)

    <script type="text/javascript" language=JavaScript charset="UTF-8"> docume ...

  7. C# 如何捕获键盘按钮和组合键以及KeyPress/KeyDown事件之间的区别 (附KeyChar/KeyCode值)

    1. 首先将窗口属性KeyPreview设为true,如果属性对话框中找不到,就直接在代码里添加: 2. 添加KeyPress / KeyDown事件: 1.KeyPress 和KeyDown .Ke ...

  8. Winform下KeyDown,KeyPress,KeyUp事件的总结(转)

    原文: http://www.cnblogs.com/xiashengwang/archive/2011/09/15/2578798.html 在winform程序中,经常会用到这几个事件用于控制数字 ...

  9. C#控件中的KeyDown、KeyPress 与 KeyUp事件浅谈

    研究了一下KeyDown,KeyPress 和 KeyUp 的学问.让我们带着如下问题来说明: 1.这三个事件的顺序是怎么样的? 2.KeyDown 触发后,KeyUp是不是一定触发? 3.三个事件的 ...

随机推荐

  1. Python交互模式下方向键出现乱码

    解决办法如下: 1.安装readline模块 readline库是bash shell用的库,包含许多功能,如命令行自动补全等. ubuntu下安装的命令:   sudo apt-get instal ...

  2. 《python基础教程》笔记之 字符串

    字符串格式化 字符串格式化使用字符串格式化操作符即百分号%来实现.在%的左侧放置一个字符串(格式化字符串),而在右侧则放置希望格式化的值,可以使用一个值,如一个字符串或者数字,也可以使用多个值的元组或 ...

  3. Andriod手势密码破解

    ★ 引子 之前在Freebuf上看到一片文章讲Andriod的手势密码加密原理,觉得比较有意思,所以就写了一个小程序试试. ★ 原理            Android的手势密码加密原理很简单: 先 ...

  4. 信息安全实验一:buffer-overflow

    title: buffer-overflow date: 2016-01-10 14:17:17 categories: information-security tags: buffer-overf ...

  5. OC学习篇之---通知(NSNotificationCenter)

    在前一篇文章中我们介绍了OC中很常用的两个技术:KVC和KVO: http://blog.csdn.net/jiangwei0910410003/article/details/41912937,今天 ...

  6. [POJ] 3020 Antenna Placement(二分图最大匹配)

    题目地址:http://poj.org/problem?id=3020 输入一个字符矩阵,'*'可行,'o'不可行.因为一个点可以和上下左右四个方向的一个可行点组成一个集合,所以对图进行黑白染色(每个 ...

  7. Go http.HandlerFunc()

    //http.Handler type Handler interface { ServeHTTP(ResponseWriter, *Request) } type HandlerFunc func( ...

  8. BroadcastReceiver 案例

    BroadcastReceiver 可以接收来自系统和应用的广播,他的生命周期非常简单,只是从对象开始调用他到运行onReceiver方法之后就结束了.要想使用BroadcastReceiver和使用 ...

  9. jsonp实现跨域资源访问

    平时项目中处理ajax跨域资源请求时,例如www.example2.com上的某个页面要请求www.example1.com的数据,我们使用得较多的是jsonp方式.jsonp通过JavaScript ...

  10. linux 建库,编码,导入数据

    二.导入数据库1.首先建空数据库mysql>create database abc; 2.导入数据库方法一:(1)选择数据库mysql>use abc;(2)设置数据库编码mysql> ...