Javascript jQuery off()和unbind()之间的区别是什么

Javascript jQuery off()和unbind()之间的区别是什么,javascript,jquery,jquery-events,Javascript,Jquery,Jquery Events,我使用jQuery.bind()和.unbind()来处理scroll上的动画事件 $(window).bind('scroll', function(){ ... code ... if(code_was_successful){ $(window).unbind(e); } }); 从1.7开始(我使用的是1.11),我们应该使用.on()和.off(),但是.off()似乎不支持事件处理程序解除绑定。对于普通的点击事件等,我必须将处理程序保存到一个变量中,并设置另一个

我使用jQuery
.bind()
.unbind()
来处理scroll上的动画事件

$(window).bind('scroll', function(){
  ... code ...
  if(code_was_successful){
    $(window).unbind(e);
  }
});
从1.7开始(我使用的是1.11),我们应该使用
.on()
.off()
,但是
.off()
似乎不支持事件处理程序解除绑定。对于普通的点击事件等,我必须将处理程序保存到一个变量中,并设置另一个事件处理程序来解除绑定(这不符合目的),对于滚动事件,这是不可能的,因为
.off()
需要一个选择器来解除特定处理程序的绑定,而滚动事件不能有一个选择器

现代的方法是什么?

您可以使用
.on()
.off()
如下:

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

$(window).on('scroll', scrollHandler);
现代的做法是什么

使用命名函数表达式:

$(window).on('scroll', function handler(){
  ... code ...
  if(code_was_successful){
    $(window).off('scroll', handler);
  }
});
.off()需要一个选择器来解除特定处理程序的绑定

不,没有。就像
。on
不需要选择器。仅当要解除委托事件处理程序的绑定时,才需要选择器

正如您在中所读到的关于选择器参数:

附加事件处理程序时应与最初传递给.on()的选择器匹配的选择器


因此,如果您没有在
.on
中使用一个,您就不会在
中使用一个。off
使用
off
是现代的方式,而
解除绑定
是旧的方式。使用
关闭

见:

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


当你呼叫.unbind时,它呼叫.off。我不太明白你的意思。你的问题似乎有点不清楚。
.off()
的全部要点是“删除事件处理程序”。这直接来自jQuery的
$(window).off('scroll')
…您所说的“更糟”到底是什么意思?“这是不可能的,因为.off()需要一个选择器来解除特定处理程序的绑定”不,它没有。另外,在
$(窗口)中
e
是什么?如果是事件对象,那么是的,这就是
.undbind
.off
之间的最大区别,至少在每个文档中是这样。但是由于
.unbind
实际上只是调用
.off
,因此您可能只需要传递事件对象。^尽管我不一定推荐它,因为它不在官方文档中。一旦
.unbind
被删除(有关
.off
的详细信息:),他们可能会删除此“功能”。我相信的第二个可选参数是选择器,后跟处理程序。我不相信上面的语法是有效的…@War10ck:不,它是有效的。因为它是可选的,所以可以省略它。这与
.on
.on('click',func)
。on('click',span',func)
(它们甚至意味着不同的东西)。@FelixKling Awesome。很高兴知道。谢谢!:)