在jQuery插件中解除绑定特定的滚动事件

时间:2015-11-04 08:54:56

标签: javascript jquery

我创建了一个小的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事件,并保留其他元素的滚动事件。

2 个答案:

答案 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);