取消 HTML 中的 keydown

IT技术 javascript html keydown
2021-03-15 12:42:55

如何取消keydown键盘上特定键的 ,例如arrowsHTML 页面中的(空格、回车和)。

6个回答

如果您只对您提到的示例键感兴趣,则该keydown事件将发生,但较旧的、Blink 之前的 Opera 版本(至少包括版本 12)除外,您需要取消该keypress事件。keydown事件中可靠地识别不可打印的键keypress事件容易得多,因此以下使用在keydown处理程序中设置的变量来告诉keypress处理程序是否抑制默认行为。

var cancelKeypress = false;

document.onkeydown = function(evt) {
    evt = evt || window.event;
    cancelKeypress = /^(13|32|37|38|39|40)$/.test("" + evt.keyCode);
    if (cancelKeypress) {
        return false;
    }
};

/* For Opera */
document.onkeypress = function(evt) {
    if (cancelKeypress) {
        return false;
    }
};
谢谢。我只是想确定,因为我正在编写处理 keydown 取消的代码,并且不想安装 Opera 只是为了检查这个。
2021-04-20 12:42:55
@RobertKoritnik:我刚刚尝试过,它不适用于最新版本的 Opera。我猜它不适用于任何基于 Blink 的 Opera 版本。
2021-04-21 12:42:55
+1,我删除了我的答案以支持这个,我不知道 Opera 问题:-)
2021-05-06 12:42:55
歌剧怪癖在这些日子和时代仍然存在吗?您还需要在按键中取消吗?
2021-05-13 12:42:55
请注意,如果在按下向上箭头时更改 keydown 事件中文本框的值,则必须使用 e.preventDefault() 来防止光标出现在文本的开头而不是文本的结尾如预期。一个非常罕见的警告,但是当用户使用向上和向下箭头键浏览命令历史记录时,用于诸如基于 Web 的终端之类的东西。
2021-05-16 12:42:55

捕获 keydown 事件并返回 false。它应该在以下几行:

<script>
document.onkeydown = function(e){
  var n = (window.Event) ? e.which : e.keyCode;
  if(n==38 || n==40) return false;
}
</script>

见这里

密钥代码在此处定义

编辑:更新我的答案以在 IE 中工作

window.captureEvents已过时并已从较新版本的 Firefox 中删除,并且从未被其他一些浏览器支持。请参阅developer.mozilla.org/en/DOM/window.captureEvents
2021-04-22 12:42:55
@andy,@tim:是的,我是盲目复制粘贴的。我更正了我的答案。当然现在@tim 的回答是最快、更准确的
2021-04-22 12:42:55

jQuery 有一个很好的KeyPress 函数,它允许您检测按键按下,那么它应该只是检测键值并为您想要忽略的键值执行 if 的情况。

编辑:例如:

$('#target').keypress(function(event) {
  if (event.keyCode == '13') {
     return false; // or event.preventDefault();
  }
});
@Luke:jQuery 是否规范了keypress事件?它在不同浏览器中的表现不同,所以我很想知道 jQuery 是否解决了这些差异。
2021-04-23 12:42:55
@Andy E 的负责人:我非常相信 jQuery,但我不是专家。从我读过的内容来看,我很确定 jQuery 是跨浏览器的,并且根据他们的网站支持 IE6+ FF2+ Chrome 和 Safari。如果按键事件有不同的行为,我相信他们已经涵盖了它。
2021-04-26 12:42:55
除了我使用的是 ASP.NET 之外,我对使用 jquery 没有任何问题
2021-05-15 12:42:55
他显然没有根据他设置的标签使用 jquery
2021-05-16 12:42:55

只是返回错误。请注意,在 Opera 上这是行不通的。您可能想改用 onkeyup 并检查最后输入的字符并处理它。或者更好地使用 JQuery KeyPress

这当然是非常古老的线程。为了在 IE10 和 FireFox 29.0.1 上实现魔法,您绝对必须在keypress(非keydown)事件侦听器函数中执行此操作

if (e.preventDefault) e.preventDefault();