【问题标题】:jQuery keyboard navigation breaks on FirefoxFirefox 上的 jQuery 键盘导航中断
【发布时间】:2010-09-30 21:53:37
【问题描述】:

以下代码显示了一个 '?' 按键事件上的 div (191)。与 Google Chrome 完美配合,但拒绝与 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 值。在下面查看我的答案。

【问题讨论】:

    标签: jquery firefox keyboard cross-browser


    【解决方案1】:

    试试

    e.keyCode == XX
    

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

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

    【讨论】:

    • keypress & keyCode 在 Firefox 中不受支持(参考:quirksmode.org/js/keys.html),最好使用在 jQuery 中标准化的 e.which
    • 是的,该页面已有 2 年历史,但在使用 Firefox 时尝试底部的演示,keypress + keyCode 始终显示 0。
    • 同意@fudgey:keydowne.which 绝对是最好的。
    【解决方案2】:

    我认为你错过了一个 ;或 } 因为这在 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 fiddle:http://jsfiddle.net/q3d6S/1/

    【讨论】:

    • 谢谢。我现在看到了问题。您添加的小提琴也在 Firefox 上中断。可能是我安装的本地错误。我会在这个角度再测试一下。谢谢!
    • 你可以用e.shiftKey代替e.which == 16
    • 是的,如果这段代码出错了,说明其他地方有问题,b/c 我在 IE、FF 和 Chrome 中运行了它:)
    【解决方案3】:

    试试这个 (demo):

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

    【讨论】:

      【解决方案4】:

      好的,我明白了。我在 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))
      

      感谢所有重构技巧。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-30
        • 2011-09-03
        • 2011-03-29
        • 2013-06-28
        • 2011-02-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多