Jquery,禁用浏览器快捷键

时间:2014-05-06 10:57:27

标签: javascript jquery html browser keyboard-shortcuts

我试图阻止我的项目的一些浏览器快捷键,如果用户按 F1 键,那么它应该从项目打开一个新页面,但浏览打开其帮助页面。如果按 Ctrl + N ,则应打开特定页面,但浏览器会打开新窗口。

这是我的代码。 (的 FIDDLE

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

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


          });

6 个答案:

答案 0 :(得分:2)

似乎你不能干扰具有浏览器特殊语义的ctrl +组合键(至少在chrome 34上似乎是这种情况)。

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

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

修改

我发现this SO answer解决了Chrome上的问题(警告:我还没有使用当前版本的Chrome测试解决方案)。

答案 1 :(得分:1)

如果你没有使用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

答案 2 :(得分: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

答案 3 :(得分: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>

您可以尝试使用这个易于使用的快捷方式脚本。

答案 4 :(得分:-1)

已将此用于我的项目以使用&#34; 输入&#34;按钮,我想这可能会帮助你,用于不同的控件

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

其中13表示&#34;输入&#34;按钮

答案 5 :(得分:-1)

试试这个

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