jQuery off()和unbind()之间有什么区别

时间:2014-05-30 18:43:47

标签: javascript jquery javascript-events

我使用jQuery .bind()和.unbind()来处理滚动时的动画事件。

$(window).bind('scroll', function(){
  ... code ...
  if(code_was_successful){
    $(window).unbind(e);
  }
});

从1.7开始(我使用的是1.11)我们应该使用.on()和.off(),但是.off()似乎不支持解除自身绑定的事件处理程序。对于普通的点击事件等,我必须将处理程序保存到变量并设置另一个事件处理程序来解除绑定(这违背了目的),而对于滚动事件则不可能,因为.off()需要一个选择器解除绑定一个特定的处理程序,而滚动事件不能有一个。

现代的做法是什么?

3 个答案:

答案 0 :(得分:16)

  

现代的做法是什么?

使用命名函数表达式

$(window).on('scroll', function handler(){
  ... code ...
  if(code_was_successful){
    $(window).off('scroll', handler);
  }
});
  

.off()需要一个选择器来取消绑定特定的处理程序

不,不。就像.on不需要选择器一样。如果要解除委托事件处理程序的绑定,则只需要选择器。

您可以在documentation of .off中阅读有关选择器参数的信息:

  

一个选择器,它应该在附加事件处理程序时匹配最初传递给.on()的选择器。

因此,如果您未在.on中使用,则不要在.off中使用。

答案 1 :(得分:1)

你可以这样使用.on().off()

function scrollHandler(e){
    if (myCondition) $(e.target).off('scroll', scrollHandler);
}

$(window).on('scroll', scrollHandler);

答案 2 :(得分:0)

使用 off 是现代方式,unbind 是旧方式。使用 off

jquery documentation

<块引用>

从 jQuery 3.0 开始,.unbind() 已被弃用。自 jQuery 1.7 起,它被 .off() 方法取代,因此已经不鼓励使用它。