2014-05-06 99 views
3

我想阻止我的项目的一些浏览器快捷键如果用户按F1键然后它应该从项目打开新页面,但浏览打开其帮助页面。如果我按Ctrl + N,则应打开特定页面,但浏览器打开新窗口。jquery,禁用浏览器快捷键

这是我的代码。 (FIDDLE

$('body').keypress(function(event){ 

      if (event.keyCode == 17 && event.keyCode == 110) 
      { 
       alert("New"); 
      } 
      else 
      { 
       event.preventDefault(); 
      } 


      }); 
+0

我认为你必须单独处理控制和字符键,存储修改键的状态。iirc不能重写浏览器的决定(至少在opera和firefox上是可配置的)是否打开一个新的视口作为选项卡或作为新窗口。两个方面的评论:你应该使用类型安全的比较运算符('==='而不是'==')和标准化的''属性而不是'keyCode',正如jquery api文档所推荐的那样。 – collapsar

+0

@collapsar你可以给演示jsfiddle吗? –

+0

是的,正如collapsar所说,任何具有特殊含义的按键组合对于您的操作系统或浏览器都不会引发一个您可以处理的事件 – ejosafat

回答

-1

都用这个来我的项目使用“输入”按钮,我想这可能会帮助你,要使用不同的控制

$('body').keypress(function (e) { 
     //debugger; 
     if (e.which === 13) { 
      $("input[value='Login']").trigger('click'); 
     } 
    }); 

,其中13是“Enter” 键

+0

好吧,但是如果我想在身体上使用组合键呢? ,(不在任何输入标签),像Ctrl + N打开(重定向)其他的PHP页面。 –

-1

试试这个

$(window).keydown(function(event) { 
    if(event.ctrlKey && event.keyCode == 78) { 
     $('body').html("Hey! Ctrl+N event captured!"); 
      event.preventDefault(); 
     } 
    }); 
}); 
+0

无论语法错误,这段代码都无法正常工作,(event.ctrlKey && enent.keyCode)的概念不起作用。您可以检查jsFIddle上的修改代码(修改语法错误):https://jsfiddle.net/7qhwj8oa/1/我有一个工作示例作为答案。 – Moshtaf

0

在Firefox我想这

$(document).ready(function(){ 
    $(document).keyup(function (e) { 
     var code = (e.keyCode ? e.keyCode : e.which); 

      if(code==112) 
      { 
       alert("F1 pressed"); 
      } 

    }); 
}); 

F1 - F12:112-123干活的主浏览器

Explorer 5-7: almost 
Firefox 2.0 Windows : yes 
Firefox 2.0 Mac: yes 
Safari 1.3:almost 
Opera 9 Windows:yes 
Opera 9 Mac: incorrect 

我已经审阅http://www.quirksmode.org/js/keys.html

2

看来你不能干扰源ctrl +组合键为浏览器提供了特殊的语义(至少这似乎是在chrome 34上的情况)。

查看this fiddle演示了查询按键和组合键的一些方法。请注意,按下ctrl+n后,keydown处理程序仍会触发状态转换(通过检查按键序列ctrl+n,shift+n,shift+n)的警报来证明。

但是,我还没有找到一种方法来阻止浏览器在ui中的含义(我相信这很好,从用户的角度来看)中声明键击。

编辑

我发现this SO answer adressing对铬的问题(警告:我还没有测试解决方案WRT的当前版本的Chrome浏览器)。

0

如果你有没有限制使用jQuery,这是一个整洁的片段,你到底要什么:

var isCtrlHold = false; 
 
var isShiftHold = false; 
 

 
$(document).keyup(function (e) { 
 
    if (e.which == 17) //17 is the code of Ctrl button 
 
     isCtrlHold = false; 
 
    if (e.which == 16) //16 is the code of Shift button 
 
     isShiftHold = false; 
 
}); 
 
$(document).keydown(function (e) { 
 
    if (e.which == 17) 
 
     isCtrlHold = true; 
 
    if (e.which == 16) 
 
     isShiftHold = true; 
 
    
 
    ShortcutManager(e); 
 
}); 
 

 
function ShortcutManager(e){ 
 
    //F1: 
 
    if (e.which == 112) { //112 is the code of F1 button 
 
     e.preventDefault(); //prevent browser from the default behavior 
 
     alert("F1 is pressed"); 
 
    } 
 
    
 
    //Ctrl+K: 
 
    if (isCtrlHold && e.which == 75) { //75 is the code of K button 
 
     e.preventDefault(); //prevent browser from the default behavior 
 
     alert("Ctrl+K is pressed"); 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
Press F1 or press Ctrl+K

测试它JSFiddle

您可以在这里找到所有按键的JavaScript代码: https://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes

0
<html> 
<head> 
<script src="http://www.openjs.com/scripts/events/keyboard_shortcuts/shortcut.js"></script> 
<script> 
    shortcut.add("F1",function() { 
    alert("F1"); 
}); 

</script> 
</head> 
<body> 
Please Key press F1 

</body> 
</html> 

你可以试试这个捷径脚本其易于使用。