如何防止从浏览器触发默认快捷方式

时间:2015-12-01 12:39:31

标签: javascript

好吧,我正在尝试为Web应用程序创建自定义快捷方式。但我有一点问题(我试图找到一个解决方案,但我只找到了preventDefaultshortcut.add,我不太了解第二个问题。

我想知道如何在不调用浏览器快捷方式的情况下使用代码的自定义快捷方式。如果我使用shift key默认的镜头切换,则不会禁用大写。

感谢你们的帮助,智慧的问候。

var menu_abierto=false;

$(document).on('keypress',function(e){

    if(e.which==69 && e.ctrlKey && menu_abierto==false){

      $('.btn-1,.btn-2 ,.btn-3').prop('disabled',true);    
      $('#lista-emergencias').show();
      MenuLateralIzq();
      listarEmergencias();
      menu_abierto=true;
    } else if(e.which==69 && e.ctrltKey){
      $('.btn-1 ,.btn-2, .btn-3').prop("disabled",false);
      $('#lista-emergencias ul li').remove();
      $('#lista-emergencias ul hr').remove();
      $('#lista-emergencias').hide();
      OcultarMenuIzq();
      menu_abierto=false;
    }

});

2 个答案:

答案 0 :(得分:1)

您必须添加e.preventDefault()以阻止默认浏览器操作,然后执行自定义操作:

if( e.target.tagName.toUpperCase() != 'INPUT' ){
   if(e.which==69 && e.ctrlKey && menu_abierto==false){
        e.preventDefault();

        $('.btn-1,.btn-2 ,.btn-3').prop('disabled',true);    
        $('#lista-emergencias').show();
        MenuLateralIzq();
        listarEmergencias();
        menu_abierto=true;
    } else if(e.which==69 && e.ctrltKey){
        e.preventDefault();

        $('.btn-1 ,.btn-2, .btn-3').prop("disabled",false);
        $('#lista-emergencias ul li').remove();
        $('#lista-emergencias ul hr').remove();
        $('#lista-emergencias').hide();
        OcultarMenuIzq();
        menu_abierto=false;
    }
}

如果要为输入禁用此功能,请添加if( e.target.tagName.toUpperCase() != 'INPUT' ){

说明:

e.target表示当前所选元素,tagName获取此元素的类型,输入字段将返回INPUTtoUpperCase()只是为了确保{ {1}}返回的字符串处于模式INPUTUpperCase表示如果没有输入,换句话说,如果所选元素不是输入字段,那么您可以用海关替换浏览器快捷方式。

检查SO问题/答案 javascript capture browser shortcuts (ctrl+t/n/w)

希望这有帮助。

答案 1 :(得分:0)

您需要设置两件事:

e.stopPropagation()

防止进一步传播当前事件。

e.preventDefault()

如果事件可以取消,则取消该事件,而不会停止事件的进一步传播。