我有一些代码可以为 Web 应用程序创建热键。所有热键都可以在 IE 和 Firefox 中使用,但是Ctrl+PgUp和Ctrl+PgDn在 Chrome 中不起作用。
在四处寻找答案并编写了一些自定义测试代码之后,我相信我已经确定这是因为这些事件在 Chrome 中是在 keyup 而不是 keydown 上触发的。
这些事件的默认 Chrome 处理程序正在触发而不是我的(或至少首先触发)并将浏览器切换到下一个或上一个选项卡。如果我使用热键通过我的应用程序切换回选项卡,那么我的处理程序会捕获该事件。
所以我的问题是,有没有办法在 Chrome 中捕获这些事件并阻止默认功能运行?
有问题的代码是:
//These work in IE and Firefox
$(this).bind('keydown', 'ctrl+pageup', (evt) => {
this.prevPage();
return false;
});
$(this).bind('keydown', 'ctrl+pagedown', (evt) => {
this.nextPage();
return false;
});
//These catch the event in chrome, but it's too late
$(this).bind('keyup', 'ctrl+pageup', (evt) => {
this.prevPage();
return false;
});
$(this).bind('keyup', 'ctrl+pagedown', (evt) => {
this.nextPage();
return false;
});
它完全符合我在 IE 和 Firefox 中的要求,但不是 Chrome。我试过了evt.preventDefault()
,evt.stopImmediatePropagation
和evt.stopPropagation
。但是,它不起作用(我相信是因为在浏览器处理程序之后调用了我的处理程序)。