“DOM3级事宜”为键盘事宜制订了范例:
键盘事宜:
keydown:按下任意键触发,假如按住不放,会反复触发;
keypress:按下字符键触发,假如按住不放,会反复触发;按下Esc键也会触发;
keyup:开释键盘上的键时触发;
文本事宜:
textInput:在文本插进去文本框之前会触发textInput事宜。
顺序:
当用户按下一个键盘上的字符键:keydown –> keypress –> keyup;
当用户按下一个键盘上的非字符键:keydown –> keyup;
键盘事宜
键码event.keyCode
属性
发声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,输出oliver
DOM3级变化
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:剧本输入;