Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中特殊键(箭头,…)的交叉浏览器按键_Javascript_Keypress_Keydown_Keyup - Fatal编程技术网

javascript中特殊键(箭头,…)的交叉浏览器按键

javascript中特殊键(箭头,…)的交叉浏览器按键,javascript,keypress,keydown,keyup,Javascript,Keypress,Keydown,Keyup,我正在为终端构建浏览器界面。我需要捕捉字符(字母数字、点、斜杠等)和非字符按键(箭头、F1-F12等)。此外,如果用户按住某个键,则可以反复按下某个键(应该反复调用该函数,直到释放键为止)。空格键、字符等也是如此 我希望这是尽可能跨浏览器(失败的原因)。我也尝试过使用,但如果我理解正确,我无法在单个函数中捕获特殊键和字符键(前者应该使用keydown,后者应该使用keydown) 是否有一个JS库可以让我捕获字符和特殊键 我希望我没有错过一些明显的东西。:) 更新以澄清:我正在寻找对我隐藏浏览器

我正在为终端构建浏览器界面。我需要捕捉字符(字母数字、点、斜杠等)和非字符按键(箭头、F1-F12等)。此外,如果用户按住某个键,则可以反复按下某个键(应该反复调用该函数,直到释放键为止)。空格键、字符等也是如此

我希望这是尽可能跨浏览器(失败的原因)。我也尝试过使用,但如果我理解正确,我无法在单个函数中捕获特殊键和字符键(前者应该使用keydown,后者应该使用keydown)

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

我希望我没有错过一些明显的东西。:)

更新以澄清:我正在寻找对我隐藏浏览器实现详细信息的库。

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>

DOM 3事件规范包括,但它仍然是一个工作草案,因此可能还没有得到广泛支持,但应该非常有用

对于将键代码转换为字符,您可能会发现有帮助。知道按下了哪个键以及哪些修改器可以让您到达您想要的位置。请注意,将所有键盘映射到同一字符集可能会出现问题,因为有些键盘具有其他键盘没有的键(例如Microsoft“windows”键和Apple命令键)。可能需要一些尝试和错误

哦,你可能会觉得这篇文章很有趣。

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


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

你确定它被反复发射吗?根据(见2.2)和我的测试,情况并非如此。我很确定,当用户按住向上/向下箭头时,我会在我的网格组件中使用导航。在IE7+/FF/CHROMEI中测试如果按下修改键,在某些浏览器中可能会重复触发按键事件,而不是keyup或keydown。在某些浏览器中会这样。也许我们可以说在所有主流浏览器中都会这样。在Safari中,它也起作用。据我记忆所及,Opera也是如此。好吧,它在我使用的浏览器(Iceweasel,基于FF 3.5.16)上不起作用请注意,FF3.5并不古老,它只是因为Mozilla的编号选择而显得如此。不过,该解决方案在FF7.0.1和IE9中确实有效。。。不完美,但如果没有更好的,我就得走那条路。谢谢你指给我看!谢谢你的链接,我已经找到了。我想我还不够清楚-问题是“我如何才能避免这种疯狂?”:)你可能很容易得到95%,但最后5%将非常困难。e、 Mac上的command(Apple)键在Safari中给出代码91,而在Firefox中给出代码224。在Mac电脑上,许多功能键永远不会进入浏览器,它们会做其他事情(例如公开动作)。你不需要任何功能键。你对某些特定的浏览器和onkeydown有什么问题吗?每个浏览器实现关键事件的方式都有点不同,我无法找到一个库以合适的方式修复所有这些差异。
$(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;
   }
}