我创建了一个小的jQuery插件,可以创建粘性侧边栏,我试图创建一个“destroy”方法来消除粘性。它工作正常但是我在页面上的多个元素上使用它(手风琴中的粘性侧边栏),当我销毁它时,它会删除所有其他元素的滚动事件。
<div id=login>
<form action="" method="POST">
{% csrf_token %}
{{loginform.as_p}}
<input type="submit" value="Login"/>
</form>
</div>
<div id=register>
<form action="" method="POST">
{% csrf_token %}
{{registerform.as_p}}
<input type="submit" value="Register"/>
</form>
</div>
我认为这是如何取消绑定特定滚动事件,但是,正如我所说它删除了所有事件处理程序。我只是希望它删除调用它的这个特定元素的scroll事件,并保留其他元素的滚动事件。
答案 0 :(得分:1)
当你使用$()。off()时,第二个参数是对事件处理程序的引用,你尝试使用thisScroll
,但它是一个jQuery集合。
你应该用这个:
$(window).off('scroll', enqStick);
您可以使用另一种认为更好的解决方案,只需填写事件名称
即可$parent.find('.js-opps-aside').stickAside();
$(window).on('scroll.myCustomScroll', enqStick);
...
$(window).off('scroll.myCustomScroll');
只有一个参数的 $().off
会关闭与该事件相关的所有事件回调,在我们的例子中,它将包含所有scroll.myCustomScroll
答案 1 :(得分:1)
根据jQuery堆叠逻辑,thisScroll是$(窗口)。 你想做的是:
// Binding a handler
$(window).on('scroll', enqStick);
// removing handler by bound function handler
$(window).off('scroll', enqStick);