在下面的代码段中, Ctrl + Enter (event.which == 13
)正在运行。但是, Ctrl + R (event.which == 9
)不是。
if ($('.selector')) {
$(document).keypress(function(event) {
if ( event.altKey && event.which == 13 ) {
$('.link a').trigger('click');
} else if ( event.altKey && event.which == 82 ) {
$('.link a').trigger('click');
} else {
return false;
}
});
}
答案 0 :(得分:1)
根据http://api.jquery.com/event.which/的一些快速测试,您似乎需要event.which == 82
,而不是event.which == 9
。虽然大多数浏览器倾向于使用Ctrl + R来刷新页面,但这可能不是处理你正在做的事情的最好方法。
答案 1 :(得分:1)
防止 Ctrl + R 刷新页面的跨浏览器解决方案:
LIVE DEMO (适用于 Firefox,Chrome,Safari,Opera )
var keyEv = navigator.userAgent.indexOf('Firefox')>-1?["keypress",114]:["keydown",82];
$(document)[keyEv[0]](function(e) {
if ( e.ctrlKey && e.which == keyEv[1] ){
e.preventDefault();
alert("CTRL+R");
}
});
只需测试我们的navigator.userAgent
,您就可以决定使用哪个Key事件监听器以及相应的R
密钥代码。
如果你需要与 Ctrl 一起处理 R 和 ENTER 而不是你需要这个小调整:
LIVE DEMO (同样是所有浏览器:))
var keyEv = navigator.userAgent.indexOf('Firefox')>-1?["keypress",114]:["keydown",82];
$(document)[keyEv[0]](function(e) {
var k = e.which;
if ( e.ctrlKey && k==keyEv[1] || k==13 ){ // no XBrowser issues with 13(Enter)
// so go for it!
e.preventDefault();
alert("Do something here");
}
});
答案 2 :(得分:1)
您的代码的问题是keyPress
侦听器behaves differently,并使用一组不同的keyCode。对于keyPress
,r
密钥为114
,而对于keyDown
,密钥为82
。
另一个问题是浏览器的默认重新加载功能会覆盖您的功能,因为在释放密钥后执行了按键。要解决此问题,请将keypress
更改为keydown
。
$(document).keydown(function(e){
if(e.which === 82 && e.ctrlKey){ //keycode is 82 for keydown
alert("Pressed!");
e.preventDefault(); //stop browser from reloading
}
});
http://jsfiddle.net/DerekL/3P9NS/show
PS:似乎Firefox忽略了e.preventDefault
(根据W3C标准应该这样做)。支持所有浏览器的最佳方法是选择其他组合,或使用ctrl + alt + r
。
if(e.which === 82 && e.ctrlKey && e.altKey){