1

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

3 回答 3

1

根据http://api.jquery.com/event.which/上的一些快速测试,您似乎想要event.which == 82,而不是event.which == 9。尽管大多数浏览器倾向于使用 Ctrl + R 来刷新页面,所以这可能不是处理您正在做的任何事情的最佳方式。

于 2013-08-12T00:59:43.323 回答
1

Ctrl防止+R刷新页面的跨浏览器解决方案:

现场演示 (适用于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键代码。


如果您需要同时处理两者RENTER结合使用Ctrl,那么您只需要这个小调整:

现场演示(再次所有浏览器:))

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");  
  }
});
于 2013-08-12T01:06:30.553 回答
1

您的代码的问题是keyPress侦听器的行为不同并使用不同的 keyCode 集。因为关键是keyPresswhile for it is 。r114keyDown82

另一个问题是浏览器的默认重新加载功能将覆盖您的功能,因为按键是在您释放键后执行的。要解决此问题,请更改keypresskeydown.

$(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){
于 2013-08-12T02:07:16.720 回答