6

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

我希望这尽可能跨浏览器(jQuery keypress在该帐户上失败)。我也尝试过使用fork of jquery.hotkeys.js,但如果我理解正确,我无法在一个函数中同时捕获特殊键和字符键(应该使用 keydown 前者,后者使用 keydown )。

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

我希望我没有遗漏一些明显的东西。:)

更新澄清:我正在寻找可以隐藏浏览器实现细节的库。

4

3 回答 3

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>

更新尝试使用 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;
   }
}
于 2011-10-07T12:27:20.063 回答
1

DOM 3 事件规范包括关键事件,但它仍然是一个工作草案,因此可能还没有得到广泛支持,但应该很有帮助。

要将键码转换为字符,您可能会发现Quriskmode很有帮助。知道按下了哪个键以及哪些修饰符可以让你到达你想去的地方。请注意,您可能会遇到将所有键盘映射到相同字符集的问题,因为有些键盘具有其他键盘没有的键(例如 Microsoft“windows”键和 Apple 命令键)。可能需要进行一些试验和错误。

哦,您可能会发现文章JavaScript Madness: Keyboard Events很有趣。

于 2011-10-07T12:33:57.347 回答
1

我最终使用了keycode.js,但是我正在围绕 keydown、keypress 和 keyup 事件构建一个完整的事件管理系统,因为只有一个事件(keydown)不足以确定输入了哪个字符以及按下了哪个键。是没有对应的字符。浏览器不兼容是这个挑战的额外好处。:)

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

于 2011-10-11T06:19:47.417 回答