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:在用户单击主鼠标按钮(一般为鼠标左键)或者按下回车时触发,这一点对 ...
随机推荐
- MVC Request生命周期(综合总结)
当用户在浏览器输入一个URL地址后,浏览器会发送一个请求到服务器.这时候在服务器上第一个负责处理请求的是IIS.然后IIS再根据请求的URL扩展名将请求分发给不同的处理程序处理. 流程如下: 当请求一 ...
- sql server版本、组件和管理工具
以下信息由何问起收集,希望有帮助. SQL Server 版本 定义 Enterprise 作为高级版本, SQL Server Enterprise 版提供了全面的高端数据中心功能,性能极为快捷.虚 ...
- php实现仿百度分页
本文主要和大家分享php实现仿百度分页的实例,先来看一下效果图. 基本策略 1, 首先要查询总记录数 2, 设置每页显示的数量并计算总页数 3, 增加一个get传值num代表当前访问的是哪一页,如果没 ...
- SqlServer数据库链接字符串
完整链接字符串: 1."DataSourse=.\你的实例;Initial Catalog=yourdatabase;User ID=*;Password=*;Trusted_Connect ...
- nova-api nova-compute 启动服务的时候有的没有加配置文件有的加了
nova/nova/cmd/api.pyfrom nova import config def main(): config.parse_args(sys.argv) logging.setup(CO ...
- BCode解码练习
在学习BT协议中的一个小练习 参考了 https://github.com/airtrack/bitwave 具体B编码解释 可以自行搜索或者参考 这篇文章 bittorrent 学习(一) 种子文件 ...
- oo第12次作业
一.规格化设计发展历史 在上世纪60年代,由于程序猿们难以忍受超级难懂的机器语言和稍微好懂一点点的汇编语言,便发明了结构化的程序语言,使得程序猿们能愉快地编写复杂程度适中的程序.但是需求是在不断增长的 ...
- CRT-常用命令
1 目录操作 mkdir a ;(新建文件夹) mkdir -p a/b;(新建多及目录文件夹) Rmdir a (a只能是空目录) Rmdir -p a (a可以是多级目录) 2 文件操作 touc ...
- [Bat]UNC路径不支持的2种解决方法
UNC(Universal Naming Convention),\\servername\sharename,其中servername是服务器名.sharename是共享资源的名称 1.使用push ...
- 解决redis连接错误:MISCONF Redis is configured to save RDB snapshots, but it is currently not able to...
今天Redis服务器在连接redis数据库时突然报错:MISCONF Redis is configured to save RDB snapshots, but it is currently no ...