使用自定义快捷键覆盖浏览器快捷键

8
我使用C#创建了一个Asp.net MVC4网页应用程序,可以动态地为所有页面创建键盘快捷方式。我们可以立即使用这些键盘快捷方式进入特定页面。问题是每个浏览器都有自己的默认快捷键。例如,如果我创建 CTRL + A 键盘快捷键,它应该重定向到我的自定义页面。但默认的浏览器快捷键 CTRL + A 会选择页面上的全部内容。我想禁用默认浏览器快捷键,以优先使用我的自定义快捷键。是否有方法实现这个目标?对于我的自定义快捷键,我使用了 jQuery 的 keyUp 事件。我在互联网上查找建议时发现,在 jQuery 的 keyUp 事件中使用 preventDefault() 方法,但是我正在使用 keyUp 事件来访问我的自定义快捷键。请告诉我如何通过 C#、jQuery 或其他方式在所有浏览器中禁用默认浏览器快捷键的建议。

我非常确定这是不可能的,至少它不能在所有浏览器上可靠地工作。您可以使用 keydown 监听键盘事件并检查事件是否按下了 CTRL 键,但浏览器的 chrome 将覆盖您在 JS 中创建的任何快捷方式。 - Rory McCrossan
2个回答

9
这将使您能够做到以下几点:
e.ctrlKey && String.fromCharCode(kc).toUpperCase()

检查是否按下 Ctrl + A

$(document).on('keydown', function(e) {
  var kc = e.which || e.keyCode;

  if (e.ctrlKey && String.fromCharCode(kc).toUpperCase() == "A") {
    e.preventDefault();
    console.log(String.fromCharCode(kc).toUpperCase());
    window.location.href = 'your url here';
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
adfasfasdfsda
You should click in the document to focus and then you can test it.


如果Ctrl + F1是我的快捷键,但在IE默认情况下它会打开新的IE浏览器。我尝试了这段代码,但仍然没有用。 - venki
你的回答对于实现像ctrl+A、ctrl+P这样的快捷键非常有用,但是对于ctrl+F1到F12、alt+F1到F12或shift+F1到F12这样的快捷键,我无法实现。 - venki

-1

你的程序是正确的。我猜你可以使用ASCII值来操作这样的事情,例如:我用这个来按回车键。

$('body').on('keypress', '#Selector-Id', function(e) {
if (e.which == 13) {
alert("Hi");
}
});

只需找到控制和a的ASCII代码,并将这些值替换为13(即Enter按钮的ASCII代码),然后它就能正常工作了,我想! - Ila

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接