在javascript中跨特殊键(箭头,...)的浏览器按键

时间:2011-10-07 12:17:53

标签: javascript keypress keydown keyup

我正在构建一个终端的浏览器界面。我需要捕捉字符(字母数字,点,斜线,...)和非字符键按下(箭头,F1-F12,...)。此外,如果用户按下一些键,那么重复按键会很好(应该重复调用该函数直到释放键)。空格键,字符......也是如此......

我希望这可以作为跨浏览器(jQuery keypress在该帐户上失败)。我也尝试过使用fork of jquery.hotkeys.js,但是如果我理解正确的话,我就无法在单个函数中捕获特殊键和字符键(对于前者而言应该使用keydown,对于后者应该使用keydown)。

是否有一个JS库可以让我捕获字符和特殊键?

我希望我不会错过一些明显的东西。 :)

更新澄清:我正在寻找能够隐藏浏览器实施细节的库。

3 个答案:

答案 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)不足以确定输入了哪个字符以及哪个如果没有相应的字符,则按下键。浏览器不兼容性是此挑战的额外奖励。 :)

感谢您的回答,它帮助我完全理解了这个问题。