如何在jquery中读取绑定的hover回调函数

我使用jquery为我页面上的元素设置hover回调。 我现在正在编写一个模块,需要暂时为某些元素设置新的hover行为。 新模块无法访问hoverfunction的原始代码。

我想在设置新的hover函数之前存储旧的hover函数,这样我就可以在完成临时hover行为时恢复它们。

我认为这些可以使用jquery.data()函数存储:

 //save old hover behavior (somehow) $('#foo').data('oldhoverin',???) $('#foo').data('oldhoverout',???); //set new hover behavior $('#foo').hover(newhoverin,newhoverout); 

做新的hover行为……

 //restore old hover behavior $('#foo').hover($('#foo').data('oldhoverin'),$('#foo').data('oldhoverout')); 

但是如何从jquery获取当前注册的hover函数?

Shadow2531,我试图这样做而不修改最初注册回调的代码。 否则你的建议会正常工作。 感谢您的建议,并帮助澄清我正在寻找的内容。 也许我必须进入jquery的源代码并弄清楚这些回调是如何在内部存储的。 也许我应该将问题改为“是否可以在不修改jquery的情况下执行此操作?”

调用事件bind方法(例如hover )不会删除旧事件处理程序,只会添加新事件,因此您“恢复”旧事件函数的想法将无效,因为它不会删除您的事件。

您可以添加自己的事件,然后删除它们而不影响任何其他事件,然后使用事件命名空间: http : //docs.jquery.com/Events_(Guide)#Namespacing_events

不确定这是否有效,但你可以试试这个:

     Jquery - Get, change and restore hover handlers     

test

如果没有,也许它会给你一些想法。

我不确定这是不是你的意思,但你可以绑定自定义事件然后触发它们。

http://docs.jquery.com/Events/bind

因此,添加您的hover事件,编写hover所需的function,然后触发您的自定义事件。

也许更容易隐藏旧元素并创建一个附加事件处理程序的克隆? 然后在完成后再换回旧元素。