Javascript高级编程学习笔记(64)—— 事件(8)键盘与文本事件
键盘与文本事件
用户在使用键盘时会触发键盘事件
“DOM2级事件”最初规定了键盘事件,但是最后在定稿时又删除了相应内容
所以键盘事件被放入了DOM3级事件的规范中
总的来说有三个键盘事件:
- keydown:当用户按下键盘上的任意键时触发,按住不放会重复触发
- keypress:用户按下键盘上的字符键时触发,按住不放重复触发(按下ESC键也会触发)
- keyup:用户释放按键触发
所有元素都支持上述三个事件,但只有用户通过文本文本框输入文本时比较常用
文本事件只有一个就是 textInput 事件
该事件是对keypress 的补充
其目的在于将文本显示给用户之前实现拦截,在文本插入文本框之前都会触发该事件
以上事件中 keydown 和 keypress 事件会在文本框发生变化之前触发
keyup则会在文本框变化之后触发,若按住键不放则会持续触发 keypress 和 keydown,直到用户释放按键时才触发 keyup
总的来说触发顺序如下:
- keydown
- keypress
- textInput
- 文本改变
- keyup
PS.键盘事件也支持修改键属性:shiftKey、ctrlKey、altKey、、metakey
键码
在发生keydown 和 keyup 事件时,event对象的 keyCode 属性中会包含一个代码,与键盘上的键对应,即键码
所有非字符键的键码如下表所示:
键 | 键 码 |
退格(Backspace) | 8 |
制表(Tab) | 9 |
回车(Enter) | 13 |
上档(Shift) | 16 |
控制(Ctrl) | 17 |
Alt | 18 |
暂停/中断(Pause/break) | 19 |
大写锁定(Caps Lock) | 20 |
退出(ESC) | 27 |
上翻页(Page Up) | 33 |
下翻页(Page Down) | 34 |
结尾(END) | 35 |
开头(Home) | 36 |
左箭头 | 37 |
上箭头 | 38 |
右箭头 | 39 |
下箭头 | 40 |
插入(Ins) | 45 |
删除(Del) | 46 |
左Window | 91 |
右Window | 92 |
上下文菜单 | 93 |
小键盘0 | 96 |
小键盘1 | 97 |
小键盘2 | 98 |
小键盘3 | 99 |
小键盘4 | 100 |
小键盘5 | 101 |
小键盘6 | 102 |
小键盘7 | 103 |
小键盘8 | 104 |
小键盘9 | 105 |
小键盘+ | 107 |
小键盘及大键盘— | 109 |
小键盘. | 110 |
小键盘/ | 111 |
F1 |
112 |
F2 | 113 |
F3 | 114 |
F4 | 115 |
F5 | 116 |
F6 | 117 |
F7 | 118 |
F8 | 119 |
F9 | 120 |
F10 | 121 |
F11 | 122 |
F12 | 123 |
数字锁(Num Lock) | 144 |
滚动锁(Scroll Lock) | 145 |
分号(IE/Safari/Chrome) | 186 |
分号(Opera/FF) | 59 |
小于 | 188 |
大于 | 190 |
正斜杠 | 191 |
沉音符(`) | 192 |
左方括号 | 219 |
反斜杠 | 220 |
右方括号 | 221 |
单引号 | 22 |
等于 | 61 |
字符编码
发生 keypress 事件意味着按下的键会影响到屏幕中的文本信息
在所有浏览器,按下能够插入或 删除字符的键都会触发 keypress 事件
主流浏览器 keypress 事件的 event 对象都支持一个 charCode 属性
该属性只有发生 keypress 事件的时候才有值,这个值通常是按下键的 ASSCII 编码
此时的keyCode 通常等于零 或者按键的键码
若需要跨浏览器获取字符编码 可以使用以下的代码:
- function getCharCode(event){
- if(typeof event.charCode ==="number"){
- return event.charCode;
- }else{
- return event.keyCode;
- }
- }
DOM3级变化
我们知道 DOM2级事件主要是关于 addEventListener 等规范,DOM3级事件主要规范的则是键盘事件
尽管所有浏览器都实现了某种形式的键盘事件,DOM3级事件还是做出了一些改变:
DOM3级事件中的键盘事件将不再包含 charCode 属性,取而代之的时两个新属性:key 和 char
key:用于取代 keyCOde 而新增,其值为一个字符串。按下字符键时key的值为按键对应的字符,按下非字符按键其值则是键对应的名如(shift)
char:对于字符按键行为与 key 相同,非字符按键其值为null
此外DOM3级事件还添加了名为 location 的属性,是一个数值,表示按下了什么位置上的键
0:默认键盘
1:左侧
2:右侧
3:小键盘
4:移动设备键盘
5:手柄
最后还给 event 对象添加了 getModifierState()方法
该方法接收一个参数,即 shift 、meta等修改键名的字符串,表示要检测的修改键,若调用该方法时修改键处于被按下的状态则返回 true 否则返回 false
textInput事件
该事件是 DOM3级规范引入的新事件,根据规范,当用户在可编辑区域输入字符时则会触发该事件
该事件与 keyPress 事件的区别在于,textInput 只有可编辑区域才能触发,而keypress 任何可以获得焦点的元素都能触发
由于textinput 事件主要考虑的是字符,因此他的event对象中还包含一个属性 data
该属性的值为用户输入的字符
此外 event 对象上还有一个属性叫做 inputMethod,表示文本输入到文本框中的方式
0:浏览器不确定的方式
1:键盘输入
2:粘贴
3:拖放
4:使用IME(输入法编辑器)输入
5:表单选择输入
6:手写输入
7:语音输入
8:组合输入
9:脚本输入
Javascript高级编程学习笔记(64)—— 事件(8)键盘与文本事件的更多相关文章
- Javascript高级编程学习笔记(57)—— 事件(1)事件流
事件 JS与HTML的交互是通过事件实现的 而事件指的就是:文档或浏览器窗口特定的交互瞬间 可以通过侦听器来预定事件,以便在事件发生时执行相应的代码 这种模式也是设计模式中的观察者模式 事件流 有了事 ...
- Javascript高级编程学习笔记(72)—— 模拟事件(2)IE事件模拟
IE中的事件模拟 低版本的IE浏览器作为前端开发的一股清流,想避过都不行 虽然低版本IE正在逐步被市场淘汰,不得不承认IE8以下的浏览器依然占了不小的份额 所以这里大概介绍IE8以下的低版本IE中的事 ...
- Javascript高级编程学习笔记(71)—— 模拟事件(1)DOM事件模拟
事件,指的是网页中某个特定的交互时刻 一般来说事件由浏览器厂商负责提供,一般由用户操作或者其它浏览器功能来触发 但是有一类特殊的事件,那就是由我们开发人员通过JS触发的事件 这些事件和浏览器创建的事件 ...
- Javascript高级编程学习笔记(70)—— 事件(14)内存和性能
由于事件处理程序是现代的web程序交互能力的提供者 所以在日常实践中,我们免不了要向页面中添加大量的事件处理程序(不管是用于用户交互还是用于统计用户数据) 在创建GUI(图形用户界面)的语言(如C#) ...
- Javascript高级编程学习笔记(69)—— 事件(13)触摸与手势事件
触摸与手势事件 由于移动设备既没有鼠标也没有键盘,所以在为移动浏览器开发交互性网页时,常规的鼠标键盘事件根本不够用 所以早期的苹果为Safari 添加了一些与触摸相关的事件 随着后面Android的W ...
- Javascript高级编程学习笔记(67)—— 事件(11)HTML5事件
DOM规范没有涵盖所有浏览器支持的所有事件 而许多浏览器出于满足用户需求,或解决特殊问题的目的,实现了一些自定义事件 HTML5列出了浏览器应该支持的所有事件,这里只讨论得到浏览器完善支持的事件(并非 ...
- Javascript高级编程学习笔记(66)—— 事件(10)变动事件
变动事件 DOM2级的变动事件,能在DOM中的一部分发生变化时给出提示 变动事件是为XML或HTML DOM 设计的,并不特定于某种语言 DOM2级定义了如下变动事件: DOMSubtreeModif ...
- Javascript高级编程学习笔记(65)—— 事件(9)复合事件
复合事件 复合事件是 DOM3 中新增的一类事件,用于处理 IME 的输入序列 IME(输入法编辑器)通常用于输入物理键盘上找不到的字符,而这种输入方式通常需要同时按住多个键,但最终只输入一个字符 复 ...
- Javascript高级编程学习笔记(63)—— 事件(7)鼠标及滚轮事件
鼠标与滚轮事件 鼠标事件是web开发中最常用的一类事件,毕竟鼠标是最主要的定位设备 DOM3级事件中定义了9个鼠标事件: click:在用户单击主鼠标按钮(一般为鼠标左键)或者按下回车时触发,这一点对 ...
随机推荐
- ABP框架记录
1.先在Core项目中建立模型Models>Model.cs/ModelManager.cs 2.在Application中建立接口和具体类:IModelAppService.csModelAp ...
- C# 使用运算符重载 简化结果判断
执行某个方法后, 一般都要对执行结果判断, 如果执行不成功, 还需要显示错误信息, 我先后使用了下面几种方式 /// <summary> /// 返回int类型结果, msg输出错误信息 ...
- Ax用Excel导出表的字段属性信息
static void CKT_ExportTableColnum(Args _args){ LJD_QaHalf_Figure _LJD_QaHalf_Figure; SysDictTable sd ...
- What is REST API
What is REST REST is acronym for REpresentational State Transfer. It is architectural style for dist ...
- Sum of Subsequence Widths LT891
Given an array of integers A, consider all non-empty subsequences of A. For any sequence S, let the ...
- js中创建对象
https://www.cnblogs.com/starof/p/4162354.html
- mysql安装完启动问题解决
一.初始化报错问题: 1./usr/local/mysql/bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/loca ...
- java上传文件常见几种方式
1.ServletFileUpload 表单提交中当提交数据类型是multipare/form-data类型的时候,如果我们用servlet去做处理的话,该http请求就会被servlet容器,包装成 ...
- Numpy与Matplotlib
一.Numpy numpy支持大量的维度数组和矩阵运算,对数组运算提供了大量的数学函数库! numpy比Python列表更具优势,其中一个优势便是速度.在对大型数组执行操作时,numpy的速度比Pyt ...
- sqlserver 分割字符串和调用
传入某种规则拼接字符串获得数组(表) /*功能说明:传入字符串跟分割符('''SGHE00000003'',''SGHE00000004'',''SGHE00000005'''),返回一个Table* ...