【问题标题】:Javascript/JQuery How to prevent function from repeatedly executed when holding down key?Javascript/JQuery 按住键时如何防止函数重复执行?
【发布时间】:2011-07-12 08:39:41
【问题描述】:

假设我们有以下 JQuery 代码:

$(document).bind('keyup', function(e) {    
    arrows=((e.which)||(e.keyCode));    
    switch (arrows){    
       case 37:
          executeMyfunction();     
          break;    
    }    
});

如果用户按住左箭头键 (37),则会重复调用 executeMyfunction()。

如何防止这种情况发生?

我认为keyup 只会在密钥被释放但它不起作用时才会触发(这就是我使用 keyup 的原因;keydown 也不起作用)。

【问题讨论】:

  • 你能建立一个 jsfiddle.net 来展示这个吗?
  • 这对我来说按预期工作:jsfiddle.net/VMvcT
  • @loannis 嗯,你的 TAB 键一定是坏了:)
  • @loannis Afaik,keydown 和 keypress 会重复触发,keyup 不会。
  • @loaniss 你的arrows 变量必须被声明!

标签: javascript jquery keypress jquery-events onkeyup


【解决方案1】:

我相信你必须解除绑定事件。我觉得不应该是keyup,而是keypress或者keydown。

大概是这样的。

$(document).bind('keydown', function(e) {    
    arrows=((e.which)||(e.keyCode));    
    switch (arrows){    
       case 37:    
          executeMyfunction();    
          $(document).unbind('keydown');    
          break;    
    }
});

如果您想再次使用该事件,则必须重新绑定 keyup 上的函数:

$(document).bind('keyup', function(e) {        
    switch (arrows){    
      case 37:
         $(document).bind('keydown');
         break;
    }    
})

看: http://api.jquery.com/unbind/

【讨论】:

【解决方案2】:

好吧,你总是可以debounce 调用你的函数。也就是说,如果您希望在短时间内没有触发事件之后调用您的函数。

【讨论】:

    猜你喜欢
    • 2019-09-25
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 2021-06-02
    相关资源
    最近更新 更多