键盘上的键分为字符键和功能键两种,也称为可打印键和不可打印键。
功能键包括Esc、F1~F12、Tab、Caps Lock、Shift、Ctrl、Insert、Home、Page Up、Page Down、Delete、End、Up、Down、Left、Right、Enter等
键盘事件的触发顺序为:keydown - keypress - keyup。
keydown和keyup是键盘上绝大部分键都要触发的,除极个别的某几个键可能会特殊些。
keypress经检测,是所有字符键所触发的,包括数字、字母、标点符号、回车等。
对于一个keyevent,可能的属性有keyCode、charCode、which。
keyCode是键盘上每个键的键码,如图所示,图片来自http://www.phpweblog.net/kiyone/archive/2007/04/19/1138.html
charCode是所有字符键的Unicode码,区分字母大小写,不区分小键盘。
对于IE8,仅支持keyCode。
对于Chrome,支持keyCode、charCode、which。对于keydown和keyup,keyCode=wihch,charCode=0;对于keypress,keyCode=which=charCode。
对于Firefox,支持keyCode、charCode、which。对于keydown和keyup,与Chrome一致,keyCode=wihch,charCode=0;对于keypress,keyCode=0,charCode=which。
测试程序:
<script type="text/javascript">
function kd(e) {
e = e || window.event;
console.log('keydown : ' + e.keyCode + ', ' + e.charCode + ', ' + e.which);
}
function kp(e) {
e = e || window.event;
console.log('keypress : ' + e.keyCode + ', ' + e.charCode + ', ' + e.which);
}
function ku(e) {
e = e || window.event;
console.log('keyup : ' + e.keyCode + ', ' + e.charCode + ', ' + e.which);
console.log('=======================================');
}
</script>
<input type="text" οnkeydοwn="kd(event)" οnkeypress="kp(event)" οnkeyup="ku(event)">
注:以上均为个人理解,如有错误,请指正。