覆盖FF中的F1键,铬,即。键盘上的ie8 / chrome和按键上的FF是F1吗?那么输入字段中的<tab>呢?</tab>

时间:2009-09-24 18:48:19

标签: jquery events keyboard cross-browser

我正在用jquery创建命名空间事件。当我使用以下函数和code = 112,函数bool = false时,一切都在FF中工作正常,F1键提交到我的函数,事件没有冒出来在新选项卡中打开firefox帮助。

function bindKeyFunc(code, func, bool){
    $(document).bind('keypress.' + code, function(e){
        var c = (e.keyCode ? e.keyCode : e.which);
        //console.log(c);
        if ( code == c) {
            //e.stopPropagation();
            //e.preventDefault();
            func();
            return bool;
        }
    });
}

在chrome和ie8中,我的事件监听器不会触发,而是会发生常规帮助,即使我取消注释stopPropagation和preventDefault调用。

同样,当我尝试接管<tab>密钥用于我自己的目的时,它在FF中运行得非常好,但我的事件不会在chrome或ie8中触发,而标签的默认操作则会触发:< / p>

    $('input#manual-total').bind('keypress.dep', function(e) {
        var code = (e.keyCode ? e.keyCode : e.which);
        if ( code==9 ){
            $('div#formset').show();
            $(next).focus()[0].select();
            return false;
        }
    });

4 个答案:

答案 0 :(得分:2)

document.addEventListener上的普通keydown在Chrome上为我工作。

var util = { };

document.addEventListener('keydown', function(e){

    var key = util.key[e.which];
    if( key ){
        e.preventDefault();
    }

    if( key === 'F1' ){        
      // do stuff
    }
})

util.key = { 
  9: "tab",
  13: "enter",
  16: "shift",
  18: "alt",
  27: "esc",
  33: "rePag",
  34: "avPag",
  35: "end",
  36: "home",
  37: "left",
  38: "up",
  39: "right",
  40: "down",
  112: "F1",
  113: "F2",
  114: "F3",
  115: "F4",
  116: "F5",
  117: "F6",
  118: "F7",
  119: "F8",
  120: "F9",
  121: "F10",
  122: "F11",
  123: "F12"
}

答案 1 :(得分:1)

您无法使用F1-F12键浏览器。试试这个演示。 http://jshotkeys.googlepages.com/test-static-01.html

答案 2 :(得分:1)

祝你好运。在浏览器中映射特殊键是一团糟。特别是IE certainly does not fire keypress events for function keys at all。但是,onkeydown / up可能适用于IE。许多密钥由不同的浏览器以不同的方式处理不正确。我强烈怀疑有一种处理F1的跨浏览器方法。抱歉;我知道这不是你想要的答案,但我相信这是事实。

请阅读链接文章,特别是偶尔发出的警告“当我发现我决定不通过进行进一步的标点字符实验来冒险我的理智时。”等等。 :)

答案 3 :(得分:0)

使用keydown代替keyup和preventDefault,因为如果你使用keyup chome已经触发了帮助页面,则chrome使用keydown。

    if (e.key === "F1") {
        e.preventDefault();
        //Do Code Here
    };