Frage

Ich benutzte jQuery zu setzen hover Rückrufe für Elemente auf meiner Seite.Ich bin jetzt Schreibe ein Modul, das muss vorübergehend neue hover-Verhalten für einige Elemente.Das neue Modul hat keinen Zugriff auf den ursprünglichen code für die hover-Funktionen.

Ich möchte zum speichern der alten hover-Funktionen, bevor ich neue ersetzt, so kann ich Sie wiederherstellen, wenn Sie fertig sind mit dem temporären hover-Verhalten.

Ich denke, diese können gespeichert werden mit die jQuery.data() Funktion:

//save old hover behavior (somehow)

$('#foo').data('oldhoverin',???)

$('#foo').data('oldhoverout',???);

//set new hover behavior

$('#foo').hover(newhoverin,newhoverout);

Dinge zu tun mit neuen hover-Verhalten...

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

Aber wie bekomme ich den derzeit registrierten hover-Funktionen von jQuery?

Shadow2531, ich bin versucht, dies zu tun, ohne den code ändern, die ursprünglich registrierten Rückrufe.Ihr Vorschlag würde funktionieren anders.Vielen Dank für den Vorschlag und helfen zu klären, was ich Suche.Vielleicht habe ich zu gehen, in die Quelle der jquery-und herausfinden, wie diese Rückrufe werden intern gespeichert.Vielleicht sollte ich die Frage anders stellen "Ist es möglich, dies zu tun, ohne änderung jquery?"

War es hilfreich?

Lösung

Ruft ein Ereignis bind Methode (wie hover) löscht keine alten event-Handler, nur fügt Ihr neue Veranstaltungen, damit Ihre Idee von der "Wiederherstellung" der alten event-Funktionen nicht funktionieren würde, als wäre es nicht löschen Ihres events.

Sie können fügen Sie Ihre eigenen Ereignisse, und entfernen Sie Sie anschließend, ohne dass dies Auswirkungen auf andere Ereignisse, dann verwenden Sie Ereignis-Namensräume: http://docs.jquery.com/Events_(Guide)#Namespacing_events

Andere Tipps

Nicht sicher, ob dies funktionieren wird, aber Sie können versuchen, diese:


<!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>

Wenn nicht, vielleicht es ' ll geben Sie einige Ideen.

Ich bin mir nicht sicher, ob dies ist, was Sie bedeuten, aber Sie binden können benutzerdefinierte Ereignisse und klicken Sie auslösen.

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

So fügen Sie Ihrem hover-Ereignis, Skript-Funktionen, die Sie benötigen, für, schweben, und lösen dann das benutzerdefinierte Ereignis.

Vielleicht wäre es einfacher, nur verstecken die alte element und erstellen Sie einen Klon mit Ihrem event-Handler verbunden ist?Dann tauschen Sie Sie einfach zurück in die alte-element, wenn Sie fertig ist..

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top