美文网首页
键盘与文本事件

键盘与文本事件

作者: shirleyyu001 | 来源:发表于2017-01-08 17:53 被阅读0次
    1、keydown

    当用户按下键盘上的任意键时触发,而且如果按住不放的话,会重复触发此事件。

    是在文本框发生变化之前被触发的,keydown事件中拿不到当前按下的键的值。但是可以通过e.keyCode来获得当前按键的值。不过有兼容性问题。
    keyCode属性的值与ASCII码中小写字母或数字对应的编码相同。

    //html
    <input type="text" name="input" id="myInput" value="1">
    
    //js
    document.getElementById('myInput').addEventListener('keydown',function(e){
        console.log(e.type);
        console.log(e.target.value);
        console.log(e.keyCode);
    })
    
    2、keypress

    当用户按下键盘上的字符键时触发,而且如果按住不放的话,会重复触发此事件。按下功能键不会触发。
    在所有浏览器中,按下能够插入或删除字符的键都会触发keypress事件。

    与keydown一样,可以通过e.keyCode获得当前按下的键值。也可以通过charCode获得当前按下的键所代表字符的ASCII编码。charCode只有在发生keypress事件时才包含值,此时的keyCode通常等于0或者也可能等于所按键的键码。
    要想以跨浏览器的方式取得字符编码,必须首先检测charCode属性是否可用,如果不可用则使用keyCode。
    在取得了字符编码之后,就可以用String.formCharCode()将其转换成实际的字符。

    if(typeof e.charCode == 'number'){
       return e.charCode;
    }else{
      return e.keyCode;
    }
    
    3、keyup

    当用户释放键盘上的键时触发。

    说明

    在用户按了一下键盘上的字符键时,首先会触发keydown事件,然后紧跟着是keypress事件,最后会触发keyup事件。其中,keydown和keypress都是在文本框发生变化之前被触发的;而keyup事件则是在文本框已经发生变化之后被触发的。如果用户按下一个字符健不放,就会重复触发keydown和keypress事件,走到用户松开键为止。
    如果用户按下的是一个非字符键,那么首先会触发keydown事件,然后就是keyup事件。如果按住这个非字符键不放,那么就会一直重复触发keydown事件,走到用户松开这个键,此时会触发keyup事件。

    textInput

    此事件只有在能触发keypress的情况下才会触发,是对keypress的补充,用意是在将文本显示给用户之前更容易拦截文本。在文件插入文本框之前后触发textInput事件。
    目前兼容性不太好,firefox(50.1.0)不支持,chrome(版本 55.0.2883.95 (64-bit))、safari(版本 9.1.2)支持,其它浏览器未试过。

    触发顺序(在支持此事件的浏览器中):
    • keydown
    • keypress
    • textInput
    • keyup

    通过e.data获取当前的按键值

    备注

    这是一篇学习《Javascrpt高级程序设计》(第3版)的学习笔记,之所以发出来是因为在网上查找textInput事件时看到一些文章对keypress的描述不准确。

    相关文章

      网友评论

          本文标题:键盘与文本事件

          本文链接:https://www.haomeiwen.com/subject/rmaqbttx.html