我正在为用户定义的快捷键组合创建一个文本框,它只打印出修饰符和键。
我真的不关心它是否在你按下或释放键时设置,所以我从keypress
事件开始。首先,修饰语似乎影响了键码(如shift给出大写,这意味着键码根本不是键码,而是键入的字符码),但preventDefault
似乎也不能正常工作,所以我改成了keydown
。这在event.keyCode中引入了一个差异。例如,逗号,
产生一个令人愉快的ascii keyCode=44
,但现在它是一个令人讨厌的keyCode=188
。
测试页面:http://www.javascripter.net/faq/keyboardeventproperties.htm
我真的希望这里有一些标准化的键码,或者至少是一些一致的键码。我的要求是一个变通办法。:
-
对于奇怪但更一致的
keydown
/keyup
,获得可打印字符(忽略修饰符,因此,
/<
被认为是相同的键并给出,
)的最佳方法是什么? -
keypress
可以做得更像keydown
/keyup
,实际上给出了按下的键,是否有像preventDefault
这样的机制来阻止浏览器拦截快捷键?
相关:http://www.javascripter.net/faq/keycodes.htm
目前,我只打算使用keydown
和修改后的版本:http://www.javascripter.net/faq/fromkeycode.js
function fromKeyCode(n) {
if( 47<=n && n<=90 ) return unescape('%'+(n).toString(16))
if( 96<=n && n<=105) return (n-96).toString()
if(112<=n && n<=135) return 'F'+(n-111)
if(n==8) return 'Backspace'
if(n==9) return 'Tab'
if(n==13) return 'Enter'
if(n==16) return 'Shift'
if(n==17) return 'Ctrl'
if(n==18) return 'Alt'
if(n==19) return 'Pause'
if(n==20) return 'Caps_lock'
if(n==27) return 'Esc'
if(n==32) return 'Space'
if(n==33) return 'Page_up'
if(n==34) return 'Page_down'
if(n==35) return 'End'
if(n==36) return 'Home'
if(n==37) return 'Left'
if(n==38) return 'Up'
if(n==39) return 'Right'
if(n==40) return 'Down'
if(n==42) return '*' //Opera
if(n==43) return '+' //Opera
if(n==45) return 'Insert'
if(n==46) return 'Delete'
if(n==91) return 'Meta'
if(n==92) return 'Meta'
if(n==106) return '*'
if(n==107) return '+'
if(n==109) return '-'
if(n==110) return '.'
if(n==111) return '/'
if(n==144) return 'Num_lock'
if(n==145) return 'Scroll_lock'
if(n==186) return ';'
if(n==187) return '='
if(n==188) return ','
if(n==189) return '-'
if(n==190) return '.'
if(n==191) return '/'
if(n==192) return '`'
if(n==219) return '['
if(n==220) return '\'
if(n==221) return ']'
if(n==222) return '''
if(n==224) return 'Meta'
return ""
}