资讯专栏INFORMATION COLUMN

JavaScript 事件——“事件类型”中“键盘与文本事件”的注意要点

everfight / 1766人阅读

摘要:级事件为键盘事件制订了规范键盘事件按下任意键触发,如果按住不放,会重复触发按下字符键触发,如果按住不放,会重复触发按下键也会触发释放键盘上的键时触发文本事件在文本插入文本框之前会触发事件。

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/91596.html

相关文章

  • JavaScript系列之事件类型

    摘要:有两种事件处理程序的方式。第一种第二种事件当调整浏览器的窗口到一个新的宽度或高度时,就会触发事件。事件在元素获得焦点时触发。这个事件冒泡某些浏览器不支持。事件在鼠标光标从元素外部首次移动到元素范围内时触发。事件这个事件跟踪鼠标滚轮。 JavaScript简单入门可以看看我丑丑的Github博客JavaScript简单入门 本文主要简单介绍以下几类事件: UI事件 焦点事件 鼠标与滚轮...

    chanthuang 评论0 收藏0
  • JavaScript DOM 事件初探

    摘要:级事件规定的事件流包括三个阶段事件捕获阶段处于目标阶段和事件冒泡阶段。对象只存在于事件处理程序执行期间,一旦执行完毕,立即被销毁。焦点事件焦点事件会在页面元素获得或失去焦点时触发。 JavaScript DOM 事件初探 原文链接 事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间,比如单击、双击、鼠标悬浮等。 事件流 事件流描述的是从页面中接收事件的顺序,或者说是事件在页面中传播...

    Moxmi 评论0 收藏0
  • 高程3总结#第13章事件

    摘要:所有节点中都包含这两个方法,并且它们都接受个参数要处理的事件名,作为事件处理程序的函数和一个布尔值。和支持这个事件。 事件 事件流 事件流描述的是从页面中接收事件的顺序 事件冒泡 IE的事件流叫做事件冒泡,即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点showImg(https://segmentfault.com/img/bVbg5...

    RyanQ 评论0 收藏0
  • Javascript事件(二)

    摘要:和支持这个事件。特定于事件目标的对象的数组。这个事件的目的是提供与文档或元素的加载状态有关的信息和有一个特性,名叫往返缓存,或,这个事件在页面显示时触发该事件会在浏览器卸载页面的时候触发事件的对象还包含一个名为的布尔值属性。 showImg(http://static.segmentfault.com/build/global/img/emojis/ribbon.png);事件类型 ...

    desdik 评论0 收藏0
  • DOM事件

    摘要:与之间的交互是通过事件实现的。而,则将事件一直冒泡到对象。事件处理程序的名字以开头,例如。级事件处理程序通过指定事件处理程序的传统方式,就是将一个函数赋值给一个事件处理程序属性。变动事件在结构发生变化时触发,比如插入或者删除节点。 javascript与HTML之间的交互是通过事件实现的。事件就是文档或者浏览器中发生的一些特定的交互瞬间。 事件流 事件流描述的是页面接受事件的顺序,而I...

    AlphaGooo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<