解除绑定jQuery插件?

5
我有一个插件,命名为$.fn.mycoolplugin,它将mousemove绑定到文档上,代码如下:
$(document).("mousemove", function() {
    //bunch of stuff
});

在您调用选择器上的函数之后

$('.myclass').mycoolplugin();

我该如何解除绑定,因为mousemove已经绑定到文档上,而我的代码中其他部分使用了mouseentermouseleave?


1
通常标准的jQuery插件都有一个destroy方法,所以你可以调用$('.myclass').mycoolplugin('destroy')。你可能想要添加这个方法。在jQuery作者文档中有一个例子。 - John Kalberer
你需要记住所有绑定到事件的元素,并调用unbind方法。 - Tae-Sung Shin
@john - 是的,我试图联系作者 - 但是很遗憾没有回应 :( - Tom
2个回答

0

您可以通过调用.unbind来解除任何处理程序的绑定:

$(document).unbind("mousemove");

这将从document中解除所有mousemove处理程序的绑定。请注意,这样做可能会破坏插件的功能(有风险破坏添加mousemove处理程序到document的任何其他代码/插件)。


谢谢 :) 是的,我尝试过了,但问题是它会解除文档上所有事件的绑定,这会影响到我的其他代码部分,因为它们使用了mouseenter和mouseleave事件。 - Tom
它只会解除 mousemove,而不是 mouseleave/mouseenter - Mrchief
是的,我也在另一个部分使用 mousemove :D 真是噩梦 :/ - Tom
1
然后在您的代码中使用命名空间事件:$(document).bind(“mousemove.myCode”);只取消绑定命名空间事件。 - Mrchief
好的,我会按照你建议的使用命名空间 :) 考虑到插件没有“destroy”,这将使它变得更简单。谢谢! - Tom
顺便问一下 - 你可以像这样取消绑定一个函数吗 $(document).unbind('mousemove', myfunction(event_data)); - Tom

0

您可以更改插件绑定和释放其附加处理程序的方式,如下所示:

  1. 创建一个负责绑定所有初始事件(例如鼠标移动等)的函数。
  2. 创建一个负责解除所有初始事件绑定的函数。
  3. 当您绑定事件时,请不要使用匿名函数。相反,为事件定义一个特定的处理程序。这样,当您进行附加时,可以这样做:

    $(document).bind('mousemove', myFuncDelegate);

然后,当您需要将其从范围中删除时,可以解除绑定:

 $(document).unbind('mousemove', myFuncDelegate);

这样你只需要取消绑定事件。有关详细信息,请参见http://api.jquery.com/unbind/

只需在加载时调用绑定方法,当您决定卸载它时,调用解除绑定方法即可。


3
另一种方法是给你的mousemove事件一个“命名空间” -> $(document).bind('mousemove.myNs', function() { }); 然后使用$(document).unbind('mousemove.myNs');来解除它。 - Keith Rousseau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接