2010-09-30 56 views
2

以下代码显示'?'按键事件中的div。 (191)。与Google Chrome完美兼容,但拒绝使用Firefox。有任何想法吗?Firefox上的jQuery键盘导航中断

$(document).keyup(function (e) { 
    if(e.which == 16) isShift=false; }).keydown(function (e) { 

    if(e.which == 16) isShift=true; 

    if(e.which == 191 && isShift == true) { 
    if ($('#keyboard-shortcut-menu').css('display') == 'none') { 
     $('#keyboard-shortcut-menu').show(); 
    } else { 
     $('#keyboard-shortcut-menu').hide(); 
    } 

    return false; 
} 

更新:想出这一个。 Firefox捕获'?' char为0值。查看下面的答案。

回答

0

好吧,我知道了。我在Firefox控制台上运行了这个脚本:

$(document).keydown(function(e) { 
    console.log(e.which); 
}); 

看来Firefox会捕获'?'焦炭用作值0,而谷歌浏览器捕获它作为191

通过增加一个条件代码解决了这个问题:

if((e.which == 191 && isShift == true) || (e.which == 0 && isShift == true)) 

感谢所有的重构技巧。

2

尝试

e.keyCode == XX 

哦,并且可以使用e.shiftKey如果 “Shift” 键被按下

$(document).keypress(function(e){ 
    if(e.keyCode==191 && e.shiftKey) 
    $('#keyboard-shortcut-menu').toggle(); 
    return false; 
}); 
+0

tnx,但仍然破损。 – 2010-09-30 13:14:05

+1

Firefox中不支持'keypress'&'keyCode'(参考:http://www.quirksmode.org/js/keys.html),最好使用在jQuery中标准化的'e.which'。 – Mottie 2010-09-30 13:33:48

+0

@fudgey页面上次更改2年前...它工作在FF – IcanDivideBy0 2010-09-30 14:01:47

1

测试,我认为你错过了;或} COS这部作品在FF:

$(function(){ 
    $(document).keyup(function (e) { 
      if(e.which == 16) isShift=false; 
    }).keydown(function (e) { 

      if(e.which == 16) isShift=true; 

      if(e.which == 191 && isShift == true) { 
       if ($('#keyboard-shortcut-menu').css('display') == 'none') { 
         $('#keyboard-shortcut-menu').show(); 
       } 
        else { 
         $('#keyboard-shortcut-menu').hide(); 
       } 

       return false; 
      } 
     }); 
    }); 

试试这里的JS小提琴:http://jsfiddle.net/q3d6S/1/

+0

谢谢。我现在看到了这个问题。你已经添加的小提琴也打破了Firefox。可能是我安装时的本地错误。我会在这个角度再测试一下。谢谢! – 2010-09-30 13:33:24

+0

你可以使用'e.shiftKey'而不是使用'e.which == 16' – Mottie 2010-09-30 13:36:37

+0

是的,如果这段代码被破坏了,那么在别的地方有什么错误,b/c我在IE,FF和Chrome中运行它:) – Patricia 2010-09-30 13:42:33

0

试试这个(demo):

$(document).keyup(function(e){ 
    if (e.which == 191 && e.shiftKey == true) { 
     $('#keyboard-shortcut-menu').toggle(); 
    } 
});