Firefox上的jQuery键盘导航中断

时间:2010-09-30 13:08:49

标签: jquery firefox keyboard cross-browser

以下代码显示了一个关于'?'的按键事件的div (191)。与谷歌浏览器完美配合,但拒绝使用Firefox。有什么想法吗?

$(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值。看看下面的答案。

4 个答案:

答案 0 :(得分:2)

尝试

e.keyCode == XX

哦,您可以使用e.shiftKey来测试是否按下了“shift”键

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

答案 1 :(得分:1)

我认为你错过了一个;或者}这适用于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/

答案 2 :(得分:0)

试试这个(demo):

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

答案 3 :(得分:0)

好的,我明白了。我在Firefox控制台上运行了这个脚本:

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

似乎Firefox捕获了'?' char为值0,而Google Chrome将其捕获为191。

通过添加条件代码解决它:

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

感谢所有重构提示。