一、键盘事件基础

1、定义
  • keydown:按下键盘键
  • keypress:紧接着keydown事件触发(只有按下字符键时触发)
  • keyup:释放键盘键

顺序为:keydown -> keypress ->keyup

2、示例

3、详解

1)用户按下键盘上的字符键时

  • 首先会触发keydown事件
  • 然后紧接着触发keypress事件
  • 最后触发keyup事件
  • 如果用户按下了一个字符键不放,就会重复触发keydownkeypress事件,直到用户松开该键为止

2)当用户按下非字符键时

  • 首先会触发keydown事件
  • 然后就触发keyup事件
  • 如果用户按下了一个非字符键不放,就会重复触发keydown事件,直到用户松开该键为止

3)keyup 事件中无法阻止浏览器默认事件,因为在keypress时,浏览器默认行为已经完成,即将文字输入文本框(尽管这时还没显示),这个时候不管是preventDefault还是returnValue = false,都不能阻止在文本框中输入文字的行为,如要阻止默认行为,必须在keydownkeypress时阻止

4)发生keypress事件意味着按下的键会影响到屏幕中文本的显示,即在所有浏览器中,按下能够插入或删除字符的键都会触发keypress事件

二、键码和键盘事件

  • 系统功能键Esc、Tab、CapsLk、Shift、Ctrl、Alt、Enter、Backspace、Print Screen、Scroll Lock、Pause Break、Insert、Delete、Home、End、Page Up、Page Down, F1 ~ F12,Num Lock、The Arrow Keys
1、键盘中的键
  • 分为 字符键 (可打印) 和 功能键 (不可打印)
  • keypress支持的系统功能键
  • FirefoxEsc、Enter、Backspace、Pause Break、Insert、 Delete、Home、End、Page Up、Page Down、F1 through F12、The Arrow Keys、上下左右键
  • Chrome / Oprea / SafariEnter
  • IEEsc、Enter
  • 除了 Firefox,其他chrome、oprea、safari、IE 上下左右键不会触发kepress
2、keyCode(键码)、which、charCode(字符编码)

简写记忆:

  • keydown: 获得keyCode, charCode=0
  • keyup: 获得keyCode, charCode=0
  • keypress: 字符keyCode=0,获取charCode值,反之获取keyCodecharCode=0

详述:

  • event对象包含一个keyCode属性和一个charCode属性
  • 当捕捉的是keydownkeyup事件时,keyCode表示的就是你具体按的键(也称为virtual keycode),charCode为0
  • 当捕捉的是keypress事件时,keyCode为0,charCode指的是你按下的字符(而 IE 只有一个KeyCode属性,它指的是你键入的字符(character code))
    鉴于 IE 和 FF 中的区别,建议只使用keydowkeyup事件
3、keypress 和 keydown / keyup 的区别

区别简述

  • 1)keypress 对中文输入法支持不好,无法响应中文输入
  • 2)keypress 无法响应系统功能键(如delete,backspace
  • 3)由于前面两个限制,keydown和keyupkeyCode不敏感

区别详解

  • 对系统功能键的响应方面

    • keypress事件不能对系统功能键(对中文输入法不能有效响应)进行正常的响应
    • keydownkeyup均可以对系统功能键进行有效的拦截,但事件截获的位置不同
  • keyCode对字母的大小写敏感程度

  • keypress事件的keyCode对字母的大小写敏感

  • keydown、keyup事件不敏感

  • 主附键盘的数字键敏感程度

  • keypress事件的which值无法区分主键盘上的数字键和附键盘数字键的

  • keydown、keyup事件的which值对主附键盘的数字键 敏感

4、需要注意的地方
  • 1)英文输入法

  • 所有浏览器都支持这三个事件

  • 2)中文输入法(浏览器之间表现得不太一致)

  • IE,Chrome,Safari:触发keydown和keyup, 不触发keypress

  • Firefox

    • 首次按下时触发keydown,不触发keypress
    • 在停止输入并改变文本框内容(如按下回车或者空格键)后会触发keyup只有在触发keyup事件才能获得修改后的文本值)
  • Operakeydown, keypress和keyup都不触发

  • 3)大小写

  • 大写:keydown、keypress(字母,主键盘数字、回车)、keyupwhich值相等

  • 小写:kepress获取的which不同于keydown、keyup

5、keyCode对照表
  •  

详解键盘事件(keydown,keypress,keyup)的更多相关文章

  1. 无线端不响应键盘事件(keydown,keypress,keyup)

    今天在项目时,在android手机上使用输入法的智能推荐的词的话,不会触发keyup事件,一开始想到在focus时使用一个定时器,每隔100ms检测输入框的值是否发生了改变,如果改变了就作对应的处理, ...

  2. 键盘事件keydown、keypress、keyup随笔整理总结(摘抄)

    原文1:http://www.cnblogs.com/silence516/archive/2013/01/25/2876611.html 原文2:http://www.cnblogs.com/leo ...

  3. 键盘事件keydown、keypress、keyup随笔整理总结

    英文输入法:   事件触发顺序:keydown - > keypress - > keyup   中文输入法:   firfox:输入触发keydown,回车确认输入触发keyup chr ...

  4. 键盘事件keydown、keypress、keyup

    事件触发顺序:keydown - > keypress - > keyup   中文输入法:   firfox:输入触发keydown,回车确认输入触发keyup chrome:输入触发k ...

  5. keyDown keyPress keyUp 事件的区别

    keyDown keyPress keyUp  事件的区别 一 触发顺序 显而易见,事件发生的顺序是: keydown --> keypress --> keyup 当按住一个键一段时间后 ...

  6. keydown - > keypress - > keyup 用法和区别

    英文输入法:   事件触发顺序:keydown - > keypress - > keyup   中文输入法:   firfox:输入触发keydown,回车确认输入触发keyup chr ...

  7. keydown - > keypress - > keyup

    英文输入法:   事件触发顺序:keydown - > keypress - > keyup   中文输入法:   firfox:输入触发keydown,回车确认输入触发keyup chr ...

  8. keydown,keypress,keyup三者之间的区别

    最近看了Javascript高级教程中对过滤输入的介绍,想实现比如电话号码中不能包好非数值的字符,而相应文本中插入字符的操作是keypress事件,所以就想通过阻止这个事件的默认事件行为来阻止这个事件 ...

  9. JAVASCRIPT事件详解-------原生事件基础....

    javaScirpt事件详解-原生事件基础(一)   事件 JavaScript与HTML之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间,通过监听特定事件的发生,你能 ...

随机推荐

  1. python if,循环的练习

    1.变量值的交换 ​ s1='alex'​ s2='SB' (s1,s2) = (s2,s1) 2.有存放用户信息的列表如下,分别存放用户的名字.年龄.公司信息 userinfo={ 'name':' ...

  2. N个工作日后的日期

    这里对特殊日期采用了模拟的方式,在实际开发中当然这些数据是从数据库中读取,调用方法时 只需传入开始时间(一般当前) 和N(代表N个工作日) /// <summary> /// 获取时间 / ...

  3. [Unity优化]批处理01:Statistics窗口

    参考链接: https://docs.unity3d.com/Manual/RenderingStatistics.html unity版本:2018.3.8 新建一个场景,只保留Main Camer ...

  4. Splunk 丰富数据方法

    方法1: 查找 Step 1.创建CSV文件,首字段为索引字段(关联字段) 2.导入CSV文件,Settings, Lookups, Lookup tables files 3.配置Lookup de ...

  5. 开源微信管家平台——JeeWx 捷微4.0 微服务版本发布,全新架构,全新UI,提供强大的图文编辑器

    JeeWx捷微4.0   微服务版本发布^_^ 换代产品(全新架构,全新UI,提供强大的图文编辑器) JEEWX 从4.0版本开始,技术架构全新换代,采用微服务架构,插件式开发,每个业务模块都是独立的 ...

  6. Docker 容器操作命令

    容器是镜像的一个运行实例,镜像是静态的只读文件,而容器带有运行时需要的可写文件层.如果认为虚拟机是模拟运行的一整套操作系统(包括内核.应用运行态环境和其他系统环境)和跑在上面的应用,那么Docker容 ...

  7. python 使用多进程打开多个cmd窗口,并在子进程结束之后关闭cmd窗口

    额,我想表达的是使用os.system()打开另一个可执行文件,然后等待其结束,关闭cmd窗口 主要是我突发奇想想装逼; 如果只是用multiprocessing库的多进程,然后输出信息的话,根本没法 ...

  8. MongoDB 集合(Collection)对应的物理文件

    dbpath下是清一色的collection-n-***与index-n-***开头的物理文件,如何知道某一个集合与其对应与其对应的物理文件? db.collection_name.stats() 返 ...

  9. css 动态线条制作方案

    利用 :before   or    :after  在元素中添加线条样式: 设置样式的过渡效果属性值: 改变width,left,transform等属性值,设置鼠标移入:hover 效果: li: ...

  10. git--创建空的分支

    背景:项目进行中,需要创建一个空分支.在Git中创建分支,是必须有一个父节点的,也就是说必须在已有的分支上来创建新的分支,如果你的工程已经进行了一段时间,这个时候是无法创建空分支的. 解决方法: 使用 ...