详解键盘事件(keydown,keypress,keyup)
一、键盘事件基础
1、定义
keydown
:按下键盘键keypress
:紧接着keydown
事件触发(只有按下字符键时触发)keyup
:释放键盘键
顺序为:keydown -> keypress ->keyup
2、示例
3、详解
1)用户按下键盘上的字符键时
- 首先会触发
keydown
事件 - 然后紧接着触发
keypress
事件 - 最后触发
keyup
事件 - 如果用户按下了一个字符键不放,就会重复触发
keydown
和keypress
事件,直到用户松开该键为止
2)当用户按下非字符键时
- 首先会触发
keydown
事件 - 然后就触发
keyup
事件 - 如果用户按下了一个非字符键不放,就会重复触发
keydown
事件,直到用户松开该键为止
3)在keyup
事件中无法阻止浏览器默认事件,因为在keypress
时,浏览器默认行为已经完成,即将文字输入文本框(尽管这时还没显示),这个时候不管是preventDefault
还是returnValue = false
,都不能阻止在文本框中输入文字的行为,如要阻止默认行为,必须在keydown
或keypress
时阻止
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
支持的系统功能键 :Firefox
:Esc、Enter、Backspace、Pause Break、Insert、 Delete、Home、End、Page Up、Page Down、F1 through F12、The Arrow Keys
、上下左右键Chrome / Oprea / Safari
:Enter
IE
:Esc、Enter
- 除了
Firefox
,其他chrome、oprea、safari、IE
上下左右键不会触发kepress
2、keyCode(键码)、which、charCode(字符编码)
简写记忆:
keydown
: 获得keyCode, charCode=0
keyup
: 获得keyCode, charCode=0
keypress
: 字符keyCode
=0,获取charCode
值,反之获取keyCode
,charCode
=0
详述:
event对象
包含一个keyCode
属性和一个charCode
属性- 当捕捉的是
keydown
和keyup
事件时,keyCode
表示的就是你具体按的键(也称为virtual keycode
),charCode
为0 - 当捕捉的是
keypress
事件时,keyCode
为0,charCode
指的是你按下的字符(而 IE 只有一个KeyCode
属性,它指的是你键入的字符(character code
))
鉴于 IE 和 FF 中的区别,建议只使用keydow
和keyup
事件
3、keypress 和 keydown / keyup 的区别
区别简述
- 1)
keypress
对中文输入法支持不好,无法响应中文输入 - 2)
keypress
无法响应系统功能键(如delete,backspace
) - 3)由于前面两个限制,
keydown和keyup
对keyCode
不敏感
区别详解
对系统功能键的响应方面
keypress
事件不能对系统功能键(对中文输入法不能有效响应)进行正常的响应keydown
和keyup
均可以对系统功能键进行有效的拦截,但事件截获的位置不同
keyCode
对字母的大小写敏感程度keypress
事件的keyCode
对字母的大小写敏感keydown、keyup
事件不敏感主附键盘的数字键敏感程度
keypress
事件的which
值无法区分主键盘上的数字键和附键盘数字键的keydown、keyup
事件的which
值对主附键盘的数字键 敏感
4、需要注意的地方
1)英文输入法
所有浏览器都支持这三个事件
2)中文输入法(浏览器之间表现得不太一致)
IE,Chrome,Safari
:触发keydown和keyup
, 不触发keypress
Firefox
:- 首次按下时触发
keydown
,不触发keypress
- 在停止输入并改变文本框内容(如按下回车或者空格键)后会触发
keyup
(只有在触发keyup事件才能获得修改后的文本值)
- 首次按下时触发
Opera
:keydown, keypress和keyup
都不触发3)大小写
大写:
keydown、keypress
(字母,主键盘数字、回车)、keyup
的which
值相等小写:
kepress
获取的which
不同于keydown、keyup
5、keyCode对照表
详解键盘事件(keydown,keypress,keyup)的更多相关文章
- 无线端不响应键盘事件(keydown,keypress,keyup)
今天在项目时,在android手机上使用输入法的智能推荐的词的话,不会触发keyup事件,一开始想到在focus时使用一个定时器,每隔100ms检测输入框的值是否发生了改变,如果改变了就作对应的处理, ...
- 键盘事件keydown、keypress、keyup随笔整理总结(摘抄)
原文1:http://www.cnblogs.com/silence516/archive/2013/01/25/2876611.html 原文2:http://www.cnblogs.com/leo ...
- 键盘事件keydown、keypress、keyup随笔整理总结
英文输入法: 事件触发顺序:keydown - > keypress - > keyup 中文输入法: firfox:输入触发keydown,回车确认输入触发keyup chr ...
- 键盘事件keydown、keypress、keyup
事件触发顺序:keydown - > keypress - > keyup 中文输入法: firfox:输入触发keydown,回车确认输入触发keyup chrome:输入触发k ...
- keyDown keyPress keyUp 事件的区别
keyDown keyPress keyUp 事件的区别 一 触发顺序 显而易见,事件发生的顺序是: keydown --> keypress --> keyup 当按住一个键一段时间后 ...
- keydown - > keypress - > keyup 用法和区别
英文输入法: 事件触发顺序:keydown - > keypress - > keyup 中文输入法: firfox:输入触发keydown,回车确认输入触发keyup chr ...
- keydown - > keypress - > keyup
英文输入法: 事件触发顺序:keydown - > keypress - > keyup 中文输入法: firfox:输入触发keydown,回车确认输入触发keyup chr ...
- keydown,keypress,keyup三者之间的区别
最近看了Javascript高级教程中对过滤输入的介绍,想实现比如电话号码中不能包好非数值的字符,而相应文本中插入字符的操作是keypress事件,所以就想通过阻止这个事件的默认事件行为来阻止这个事件 ...
- JAVASCRIPT事件详解-------原生事件基础....
javaScirpt事件详解-原生事件基础(一) 事件 JavaScript与HTML之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间,通过监听特定事件的发生,你能 ...
随机推荐
- Python课程第五天作业
1.利用字典推导式和列表推导式完成数据的相互转化: dic = {'name': 'Owen', 'age': 18, 'gender': '男'} ls = [('name', 'Owen'), ( ...
- Python Queue(队列)
Queue模块实现了多生产者.多消费者队列.当必须在多个线程之间安全地交换信息时,它在线程编程中特别有用,实现了所有必需的锁定语义. 一.该模块实现了三种类型的队列,它们的区别仅在于检索条目的顺序: ...
- Android 开发 View的API 转载
转载地址:https://blog.csdn.net/lemonrabbit1987/article/details/47704679 View类代表用户界面组件的基本构建块.一个View占据屏幕上的 ...
- arcgis10.2 sde配置
本机配置好oracle11g server 64位+client 32位.
- 移动端常用UI框架
作为一个前端人员来说,总结几款相对来说不错的用于移动端开发的UI框架是非常必要的,以下几种移动端UI框架就能基本满足工作中开发需要,根据项目需求,选用合适的框架搭建项目,更能容易提高开发效率. 一.M ...
- vue.js响应式原理解析与实现
vue.js响应式原理解析与实现 从很久之前就已经接触过了angularjs了,当时就已经了解到,angularjs是通过脏检查来实现数据监测以及页面更新渲染.之后,再接触了vue.js,当时也一度很 ...
- assert (boxes[:, 2] >= boxes[:, 0]).all()报错
根据报错信息,打印以下内容: 代码如下: for i in xrange(num_images): #print ('in append_flipped==================',self ...
- python中网络编程之线程
网络编程之线程 什么是线程? 程序的执行线路.每个进程默认有一条线程.线程包含了程序的具体步骤. 多线程就是一个进程中有除主线程(默认线程)外还有多个线程. 线程与进程的关系(进程包含线程,而线程依赖 ...
- 手动卸载的vs2010
手动卸载的vs2010: 环境:Win7 卸载工具:IobitUninstaller(绿色版)//个人推荐,比较强大好用按照以下顺序:1.Microsoft .NET Framework 4 框架 ...
- appium python中的android uiautomator定位
text定位:driver.find_element_by_android_uiautomator('new UiSelector().text("请输入手机号")') #模糊定位 ...