删除滚动事件无法按预期工作

时间:2017-10-31 11:14:48

标签: javascript jquery

我有以下代码结构:

function somefunc(m) {
   function anotherfunc() {
      ...
      if ( m > ... 
      ...
   }
   console.log($._data(window).events.scroll);
   // $(window).off("scroll");
   $(window).off("scroll", anotherfunc);
   $(window).on("scroll", anotherfunc);
}
checkfunc() {
   if (...) {
      somefunc("1");
   }
   else (...) {
      somefunc("2");
   }
}
$(window).resize(function() {
   checkfunc();
});

请不要介意m和绑定/解除绑定滚动事件的“逻辑”,以及我想通过它实现的目标,问题(和问题)是为什么我不能解开滚动事件。

事情是,当我使用时:

$(window).off("scroll", anotherfunc);
$(window).on("scroll", anotherfunc);

在上面的例子中,我假设每次在窗口调整大小时它将取消绑定anotherfunc的前一个滚动事件并绑定一个新事件,而是(因为它可以被console.log($._data(window).events.scroll);看到它倍增它每次......

出于测试目的,我尝试删除$(window).off("scroll", anotherfunc);并将其替换为$(window).off("scroll");,并且令人惊讶的是它解除了以前所有滚动事件的绑定。

我的问题是这里的区别是什么,因为那里没有其他滚动事件,为什么

$(window).off("scroll", anotherfunc);
$(window).on("scroll", anotherfunc);

不一样吗?

1 个答案:

答案 0 :(得分:0)

我认为正确的语法是:

$(window)
   .off("scroll") // Remove all scroll events. No callback or other action needed.
   .on("scroll", anotherfunc)