JavaScript 事宜——“事宜范例”中“键盘与文本事宜”的注重要点

“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级变化

keycharkeyIdentifier属性

DOM3级事宜中的键盘事宜,不再包括charCode属性,而是包括两个新属性:keychar

  • key属性:返回响应的文本字符(字符键返回字符,非字符键返回“shift”等);

  • char属性:返回响应的文本字符(字符键返回字符,非字符键返回null);

兼容性:

  • IE9支撑key属性但不支撑char属性;

  • Safari 5和Chrome支撑名为keyIdentifier的属性,非字符键返回“shift”等,字符键返回花样相似“U+0000”的字符串,示意Unicode值。

以下:

window.onkeydown = function () {
    console.log(event.key || event.keyIdentifier);
}

locationkeyLocation属性

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:剧本输入;

    原文作者:JS菌
    原文地址: https://segmentfault.com/a/1190000004313462
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞