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的描述不准确。
网友评论