【问题标题】:Using .off() while it is nested inside of .on()在嵌套在 .on() 内时使用 .off()
【发布时间】:2012-10-25 21:22:48
【问题描述】:

是否可以从侦听器中取消绑定侦听器?我想这样做是因为我有一个监听器,它决定了它自己解除绑定的标准(例如,当按下某个键时,监听器应该解除绑定)。

$input.on("keydown.listenerOne", function (press) {  
   if(press=="37"){
      $input.off("keyup.listenerOne");
   }
});

【问题讨论】:

  • 你试过了吗?它奏效了吗?另外我认为press 将是事件对象,而不是按下哪个键。
  • 这不是问题,如果您将off("keyup.... 更改为off("keydown....,这将起作用。你把press==改成press.keyCode==
  • 由于 keydown/keyup 不一致而无法正常工作。我盯着我的代码太久了……

标签: jquery event-handling listener jquery-events


【解决方案1】:

是的,这是一个正确的方法。您可以在处理程序中取消绑定它,但请注意您有两个不同的事件(keyup 和 keydown)。也许你的意思是keyup。

【讨论】:

    【解决方案2】:

    这不起作用,因为您正在绑定 keydown 事件并取消绑定 keyup 事件,根据您的示例,该事件没有绑定。此外,您引用为press 的事件将是eevent,您需要引用which 属性:if(e.which == 37)

    【讨论】:

      【解决方案3】:

      你应该解除你正在绑定的同一个东西。在这种情况下,当您绑定了 keydown 时,您正试图取消绑定 keyup。另外,press 不会告诉你 keyCode,你应该这样做

      var code = press.keyCode || press.which;
      if(code == 37) { //Enter keycode
         //Do something
      }
      

      而不是if (press == "37")

      取自this answer

      【讨论】:

      • 酷,您可以通过删除三元并替换为var code = press.keyCode || press.which;来进一步简化
      • @AlienWebguy:您可以只使用press.which - jQuery 为您规范化which,因此测试keyCode 是多余的。
      • 对,这就是我在回答中使用的。我只是想提一下 Jeff 如何简化三元组。
      • @nnnnnn 我没有意识到 jQuery 规范了这一点。从现在开始我会使用它。谢谢。
      猜你喜欢
      • 2016-09-27
      • 2016-09-23
      • 2018-03-16
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-02
      相关资源
      最近更新 更多