键盘与文本事件

1、keydown

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

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

//html


//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的描述不准确。

你可能感兴趣的:(键盘与文本事件)