我正在构建一个终端的浏览器界面。我需要捕捉字符(字母数字,点,斜线,...)和非字符键按下(箭头,F1-F12,...)。此外,如果用户按下一些键,那么重复按键会很好(应该重复调用该函数直到释放键)。空格键,字符......也是如此......
我希望这可以作为跨浏览器(jQuery keypress在该帐户上失败)。我也尝试过使用fork of jquery.hotkeys.js,但是如果我理解正确的话,我就无法在单个函数中捕获特殊键和字符键(对于前者而言应该使用keydown,对于后者应该使用keydown)。
是否有一个JS库可以让我捕获字符和特殊键?
我希望我不会错过一些明显的东西。 :)
更新澄清:我正在寻找能够隐藏浏览器实施细节的库。
答案 0 :(得分:4)
onkeydown 正是您所需要的。它捕获所有键,即使您按住一个按钮也会反复触发。
<input type='text' onkeydown='return myFunc(this,event)'>
<script>
function myFunc(Sender,e){
var key = e.which ? e.which : e.keyCode;
if(key == someKey){ // cancel event and do something
ev.returnValue = false;
if(e.preventDefault) e.preventDefault();
return false;
}
}
</script>
UPDATE 尝试使用jQuery
进行测试$(document).ready(function(){
$('#in').keydown(fn);
});
var cnt = 0;
function fn(e){
var key = e.keyCode ? e.keyCode : e.which;
cnt++;
if(cnt == 10) {
alert('event was fired 10 times. Last time with key: '+key);
cnt = 0;
}
}
答案 1 :(得分:1)
DOM 3事件规范包括key events,但它仍然是一个工作草案,所以可能没有得到广泛支持,但应该非常有帮助。
要将密钥代码转换为字符,您可能会发现Quriskmode有帮助。知道按下了哪个键以及哪些修饰符可以使您达到目标。请注意,您可能会遇到将所有键盘映射到相同字符集的问题,因为某些键盘具有其他键盘没有的键(例如Microsoft“windows”键和Apple命令键)。可能需要进行一些反复试验。
哦,您可能会发现文章JavaScript Madness: Keyboard Events很有趣。
答案 2 :(得分:1)
我最终使用keycode.js,但我正在构建围绕keydown,keypress和keyup事件的整个事件管理系统,因为只有一个事件(keydown)不足以确定输入了哪个字符以及哪个如果没有相应的字符,则按下键。浏览器不兼容性是此挑战的额外奖励。 :)
感谢您的回答,它帮助我完全理解了这个问题。