键盘快捷键ctrl + r不适合我

时间:2013-08-12 00:54:10

标签: javascript jquery

在下面的代码段中, 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;
    }
  });
}

3 个答案:

答案 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。对于keyPressr密钥为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){