摘要:级事件为键盘事件制订了规范键盘事件按下任意键触发,如果按住不放,会重复触发按下字符键触发,如果按住不放,会重复触发按下键也会触发释放键盘上的键时触发文本事件在文本插入文本框之前会触发事件。
“DOM3级事件”为键盘事件制订了规范:
键盘事件:
keydown:按下任意键触发,如果按住不放,会重复触发;
keypress:按下字符键触发,如果按住不放,会重复触发;按下Esc键也会触发;
keyup:释放键盘上的键时触发;
文本事件:
textInput:在文本插入文本框之前会触发textInput事件。
程序:
当用户按下一个键盘上的字符键:keydown --> keypress --> keyup;
当用户按下一个键盘上的非字符键:keydown --> keyup;
发声keydown和keyup事件,event对象的keyCode属性包含一个代码,与键盘上一个特定的键对应。对数字字母字符键,keyCode属性的值与ASCⅡ码中对应小写字母或数字的编码相同。
键码如下:
字母和数字键的键码值(keyCode) A 65 J 74 S 83 1 49 B 66 K 75 T 84 2 50 C 67 L 76 U 85 3 51 D 68 M 77 V 86 4 52 E 69 N 78 W 87 5 53 F 70 O 79 X 88 6 54 G 71 P 80 Y 89 7 55 H 72 Q 81 Z 90 8 56 I 73 R 82 0 48 9 57 数字键盘上的键的键 码值(keyCode) 功能键键码值(keyCode) 0 96 8 104 F1 112 F7 118 1 97 9 105 F2 113 F8 119 2 98 * 106 F3 114 F9 120 3 99 + 107 F4 115 F10 121 4 100 Enter 108 F5 116 F11 122 5 101 - 109 F6 117 F12 123 6 102 . 110 7 103 / 111 控制键键码值(keyCode) BackSpace 8 Esc 27 Right Arrow 39 -_ 189 Tab 9 Spacebar 32 Dw Arrow 40 .> 190 Clear 12 Page Up 33 Insert 45 /? 191 Enter 13 Page Down 34 Delete 46 `~ 192 Shift 16 End 35 Num Lock 144 [{ 219 Control 17 Home 36 ;: 186 | 220 Alt 18 Left Arrow 37 =+ 187 ]} 221 Cape Lock 20 Up Arrow 38 ,< 188 "" 222 多媒体键码值(keyCode) 音量加 175 音量减 174 停止 179 静音 173 浏览器 172 邮件 180 搜索 170 收藏 171
但部分键码在不同浏览器有不同的值;
字符编码charCode属性这个属性只有在发声keypress事件才包含值,而且这个值是按下的那个键所代表字符的ASCⅡ编码;此时的keyCode通常等于0或者也可能等于所按键的键码。
window.onkeydown = function() { console.log(event.charCode); //a的值为0 } window.onkeypress = function() { console.log(event.charCode); //a的值为97 } window.onkeydown = function() { console.log(event.keyCode); //a的值为65 } window.onkeypress = function() { console.log(event.keyCode); //a的值为97 }
上面的例子显示,当onkeydown时,charCode为0,keyCode为65;当onkeypress时,charCode与keyCode值相同为97
IE8及之前的版本和Opera是在keyCode中保存字符的ASCⅡ编码,通用版如下:
function getCharCode () { if (typeof event.charCode == "number") { return event.charCode; } else { return event.keyCode; } }
获得了ASCⅡ编码后,可以通过String.fromCharCode()将其转换成实际的字符。
var inputName = document.getElementById("name"); var list = []; inputName.onkeypress = function() { var charCode = event.charCode; var keys = String.fromCharCode(charCode); list.push(keys); charCode = null; keys = null; } inputName.onkeydown = function() { var keyCode = event.keyCode; switch (keyCode) { case 8: list.push("backspace"); break; case 37: list.push("left") break; case 39: list.push("right") break; case 13: console.log(list.join("")); inputName.value = null; list.splice(0, list.length); break; } } //输入oliver,输出oliverDOM3级变化 key、char、keyIdentifier属性
DOM3级事件中的键盘事件,不再包含charCode属性,而是包含两个新属性:key和char;
key属性:返回相应的文本字符(字符键返回字符,非字符键返回“shift”等);
char属性:返回相应的文本字符(字符键返回字符,非字符键返回null);
兼容性:
IE9支持key属性但不支持char属性;
Safari 5和Chrome支持名为keyIdentifier的属性,非字符键返回“shift”等,字符键返回格式类似“U+0000”的字符串,表示Unicode值。
如下:
window.onkeydown = function () { console.log(event.key || event.keyIdentifier); }location和keyLocation属性
location属性表示按下了什么位置上的键:
0表示默认键盘;
1表示左侧位置(左边的Alt键等);
2表示右侧位置;
3表示数字小键盘;
4表示移动设备键盘(虚拟键盘);
5表示手柄(Wii控制器等);
IE9支持这个属性;Safari和Chrome支持名为keyLocation属性(目前貌似支持location属性了);
getModifierState()方法接收一个参数(修改键),当指定的修改键是活动的,这个方法返回true,否则返回false;参数有(“Shift”、“Alt”、“Control”、“Meta”);
然而事实上用event.shiftKey等属性即可。
textInput事件 textInput事件当用户在可编辑区域中输入字符时,就会触发。与keypress不同,首先只要能获得焦点的元素都可以触发keypress,但只有可编辑区域才能出发textInput。另一个区别是textInput事件只会在用户按下能够输入实际字符的键时才会被触发,keypress则在按下能够影响文本显示的键时也会触发(例如退格键)。
另外event中data属性返回用户输入的字符:
var textbox = document.getElementById("name"); textbox.addEventListener("textInput", function () { console.log(event.data); })
注意,只能用addEventListener函数。
inputMethod属性dvent对象上的属性,表示把文本输入到文本框中的方式:
0:不确定如何输入的;
1:键盘;
2:粘贴;
3:拖放;
4:IME;
5:表单中选择某一项输入;
6:手写;
7:语音;
8:组合输入;
9:脚本输入;
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/91596.html
摘要:有两种事件处理程序的方式。第一种第二种事件当调整浏览器的窗口到一个新的宽度或高度时,就会触发事件。事件在元素获得焦点时触发。这个事件冒泡某些浏览器不支持。事件在鼠标光标从元素外部首次移动到元素范围内时触发。事件这个事件跟踪鼠标滚轮。 JavaScript简单入门可以看看我丑丑的Github博客JavaScript简单入门 本文主要简单介绍以下几类事件: UI事件 焦点事件 鼠标与滚轮...
摘要:级事件规定的事件流包括三个阶段事件捕获阶段处于目标阶段和事件冒泡阶段。对象只存在于事件处理程序执行期间,一旦执行完毕,立即被销毁。焦点事件焦点事件会在页面元素获得或失去焦点时触发。 JavaScript DOM 事件初探 原文链接 事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间,比如单击、双击、鼠标悬浮等。 事件流 事件流描述的是从页面中接收事件的顺序,或者说是事件在页面中传播...
摘要:所有节点中都包含这两个方法,并且它们都接受个参数要处理的事件名,作为事件处理程序的函数和一个布尔值。和支持这个事件。 事件 事件流 事件流描述的是从页面中接收事件的顺序 事件冒泡 IE的事件流叫做事件冒泡,即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点showImg(https://segmentfault.com/img/bVbg5...
摘要:和支持这个事件。特定于事件目标的对象的数组。这个事件的目的是提供与文档或元素的加载状态有关的信息和有一个特性,名叫往返缓存,或,这个事件在页面显示时触发该事件会在浏览器卸载页面的时候触发事件的对象还包含一个名为的布尔值属性。 showImg(http://static.segmentfault.com/build/global/img/emojis/ribbon.png);事件类型 ...
阅读 823·2021-09-07 09:58
阅读 2681·2021-08-31 09:42
阅读 2854·2019-08-30 14:18
阅读 3086·2019-08-30 14:08
阅读 1831·2019-08-30 12:57
阅读 2757·2019-08-26 13:31
阅读 1298·2019-08-26 11:58
阅读 1052·2019-08-23 18:06