【问题标题】:jQuery Hotkeys - unbinding?jQuery 热键 - 解除绑定?
【发布时间】:2011-06-21 13:33:00
【问题描述】:

我有一个 jQuery 对话框,它按如下方式初始化热键:

<script type="text/javascript">
  $(document).bind('keydown', '<%=(i+1)%>',function (evt) {
     // do stuff
  });
</script>

这循环通过 1-9...

问题是,如果您关闭对话框然后重新打开对话框。它不断地重新绑定,所以当你按下“1”时,它会运行两次、三次、四次等等……它只会不断增长。

我尝试杀死对话框关闭时的键绑定

$(document).unbind('keydown', '1');
$(document).unbind('keydown', '2');
$(document).unbind('keydown', '3');
$(document).unbind('keydown', '4');
$(document).unbind('keydown', '5'); 
$(document).unbind('keydown', '6');
$(document).unbind('keydown', '7');
$(document).unbind('keydown', '8');
$(document).unbind('keydown', '9');

但这没有任何效果。关于如何处理这个问题的任何想法?

谢谢

【问题讨论】:

标签: jquery dialog hotkeys


【解决方案1】:

请注意,.unbind() 不支持 eventData 参数,这就是您的取消绑定不起作用的原因。

在我的脑海中,你有两种不同的方法。如果这些是唯一的文档级 keydown 绑定,您可以按如下方式“完全”取消绑定:

$(document).unbind('keydown'); // unbinds *all* keydown handers on the document

或者,您可以将 keydown 处理程序存储为非匿名函数,并保留一个引用以在关闭对话框时传回 unbind:

function onkeydown(evt) {
   // do stuff
}

$(document).bind('keydown', '<%=(i+1)%>', onkeydown);

// later, in the dialog's "shutdown" code:
$(document).unbind('keydown', onkeydown);

但是,当同一个函数被多次绑定时,我不是 100% 肯定它是如何工作的。您最好消除eventData 并在事件处理程序中使用event.which 来确定按下了哪个键(这样只需要绑定一次处理程序)。

【讨论】:

    【解决方案2】:

    我使用 keydown 事件的命名空间和 one() 解决了类似的问题

    注意“keydown.g”中的.g。这将它放在一个单独的范围内,我以后可以取消绑定,而无需取消绑定文档中的每个按键。

    $(document).one("keydown.g", function(e) {
     // tab key
     if (e.which == "9") {
      e.preventDefault();
      // do something like focus on a field
      $("#target").focus();
      // once you've moved the focus, you can unbind and go back to tabbing normally
      $(document).unbind("keydown.g");
     } 
    });
    

    【讨论】:

      【解决方案3】:

      你可以使用

      <script type="text/javascript">
      $( document ).ready( function() {
          $(document).bind('keydown', '<%=(i+1)%>',function (evt) {
              // do stuff
          });
      } );
      </script>
      

      此方法在文档加载时绑定一次事件。

      【讨论】:

        猜你喜欢
        • 2011-06-11
        • 2020-05-10
        • 2012-12-11
        • 1970-01-01
        • 2012-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多