jquery - 删除 jQuery 小部件的一个实例的事件处理程序

标签 jquery jquery-ui jquery-events

我使用 jQuery UI 小部件工厂(在 Typescript 中)编写了一个小部件。

我的小部件监听窗口元素上的滚动事件,因此在 _create 函数中添加了一个事件处理程序:

_create = function () {
   $(window).on("scroll", this.handleScroll);
}

_destroy 函数中我想删除处理程序:

_destroy = function () {
   $(window).off("scroll", this.handleScroll);
}

但是,我的页面上可以有此小部件的两个实例:一个在常规页面中,一个在弹出窗口中。我当前的实现删除了两个实例的处理程序,这显然是不需要的。

我读过这个问题:Recommended way to remove events on destroy with jQuery UI Widget Factory ,那里接受的答案适用于自定义事件,但我看不到像 scroll 这样的标准事件的解决方案。

任何想法表示赞赏。

最佳答案

该解决方案也适合您。如果您还没有它们,请将 ID 分配给您的两个小部件 - 在页面上和弹出窗口中。然后,像这样修改您的代码:

_create = function () {
   $(window).on("scroll." + this.id, this.handleScroll);
}

_destroy = function () {
   $(window).off("scroll." + this.id, this.handleScroll);
}

请注意“.”在调用 on() 和 off() 滚动之后。请参阅这篇文章:Namespaced events in jquerythis one

关于jquery - 删除 jQuery 小部件的一个实例的事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20050826/

相关文章:

java - ajax调用后没有返回响应实体,为什么?

javascript - Angular : function triggers twice on ng-change while selecting any option from dropdown

jquery - Jquery UI Sortable 的边距变化

jquery - 为什么负选择器在 jQuery UI Sortable 'cancel' 属性中不起作用?

javascript - onClick 表行,其中包含 onClick 按钮和 Bootstrap Modal

javascript - 当 Firefox 自动滚动时捕获鼠标滚轮事件

jquery:有没有办法从主机目录读取所有文件?

javascript - 如何制作弹出帮助/信息消息?

jquery - 在其他对话框打开时更改 jquery 对话框标题的颜色,我们不希望它们更改

javascript - 如何提高大字符串的 javascript 工具提示的性能?