我用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?

Shadow2531,我试图做到这一点,而不修改代码最初登记的回调。您的建议将工作细则。谢谢你的建议,并帮助澄清什么,我在寻找。也许我必须去到源的能力和找出如何将这些回调都储存在内部。也许我应该改变的问题"是否有可能做到这一点,而不修改jquery?"

有帮助吗?

解决方案

叫一个事件 bind 方法(例如 hover)不删除旧的事件的处理程序,只会增加新的活动,所以你所谓的'恢复'旧的事件的功能不会的工作,因为它不会删除的事件。

你可以添加自己的活动,并随后消除他们时不影响任何其他事件则使用的命名空间活动: http://docs.jquery.com/Events_(指南)#Namespacing_events

其他提示

不知道,如果这会的工作,但是你可以试试这个:


<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Jquery - Get, change and restore hover handlers</title>
        <script src="jquery.js"></script>
        <script>
            function setHover(obj, mouseenter, mouseleave) {
                obj.data("_mouseenter", mouseenter);
                obj.data("_mouseleave", mouseleave);
                obj.hover(obj.data("_mouseenter"), obj.data("_mouseleave"));
            }
            function removeHover(obj) {
                obj.unbind("mouseenter", obj.data("_mouseenter"));
                obj.unbind("mouseleave", obj.data("_mouseleave"));
                obj.data("_mouseenter", undefined);
                obj.data("_mouseleave", undefined);
            }
            $(document).ready(function() {
                var test = $("#test");
                setHover(test, function(e) {
                    alert("original " + e.type);
                }, function(e) {
                    alert("original " + e.type);
                });
                var saved_mouseenter = test.data("_mouseenter");
                var saved_mouseleave = test.data("_mouseleave");
                removeHover(test);
                setHover(test, function() {
                    alert("zip");
                }, function() {
                    alert('zam');
                });
                removeHover(test);
                setHover(test, saved_mouseenter, saved_mouseleave);
            });
        </script>
    </head>
    <body>
        <p><a id="test" href="">test</a></p>
    </body>
</html>

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

我不知道如果这是你的意思,但你可以结合定义事件,然后触发它们。

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

所以加入你的悬停的事件,脚本的功能需要,悬停,然后触发你的定义事件。

也许它会更容易只是隐藏的旧元,并创建一个克隆与事件处理程序?然后就换回来老元,当你完成..

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top