我使用jQuery为页面上的元素设置了悬停回调。我现在正在编写一个模块,需要临时为一些元素设置新的悬停行为。新模块无法访问悬停函数的原始代码。
我想在设置新的悬停功能之前存储旧的悬停功能,这样我就可以在完成临时悬停行为后恢复它们。
我认为这些可以使用jQuery.data()
函数存储:
//save old hover behavior (somehow)
$('#foo').data('oldhoverin',???)
$('#foo').data('oldhoverout',???);
//set new hover behavior
$('#foo').hover(newhoverin,newhoverout);
使用新的悬停行为进行操作...
//restore old hover behaviour
$('#foo').hover($('#foo').data('oldhoverin'),$('#foo').data('oldhoverout'));
但是如何从jQuery中获取当前注册的hover函数呢?
Shadow2531,我正在尝试在不修改最初注册回调的代码的情况下做到这一点。您的建议在其他方面也会很好。谢谢您的建议,并帮助澄清我正在搜索的内容。也许我必须进入jquery的源代码并弄清楚这些回调是如何存储在内部的。也许我应该将问题改为“是否有可能在不修改jquery的情况下做到这一点?”
4条答案
按热度按时间afdcj2ne1#
调用事件
bind
方法(如hover
)不会删除旧的事件处理程序,只会添加新的事件,因此您“恢复”旧事件函数的想法不会起作用,因为它不会删除您的事件。您可以添加自己的事件,然后在不影响任何其他事件的情况下删除它们,然后使用事件命名空间:http://docs.jquery.com/Events_(Guide)#Namespacing_events
mhd8tkvw2#
不确定这是否有效,但您可以尝试:
如果没有,也许它会给你一些想法。
o8x7eapl3#
我不确定这是否是您的意思,但是您可以绑定自定义事件,然后触发它们。
http://docs.jquery.com/Events/bind
因此,添加悬停事件,编写悬停所需功能的脚本,然后触发自定义事件。
nom7f22z4#
也许隐藏旧元素并创建一个附加了事件处理程序的克隆会更容易些?然后在完成后交换回旧元素。