Question

J'ai utilisé jQuery pour définir des rappels de survol pour les éléments de ma page.J'écris maintenant un module qui doit définir temporairement un nouveau comportement de survol pour certains éléments.Le nouveau module n'a pas accès au code d'origine pour les fonctions de survol.

Je souhaite stocker les anciennes fonctions de survol avant d'en définir de nouvelles afin de pouvoir les restaurer une fois le comportement de survol temporaire terminé.

Je pense que ceux-ci peuvent être stockés en utilisant le jQuery.data() fonction:

//save old hover behavior (somehow)

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

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

//set new hover behavior

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

Faites des choses avec un nouveau comportement de survol...

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

Mais comment puis-je obtenir les fonctions de survol actuellement enregistrées auprès de jQuery ?

Shadow2531, j'essaie de faire cela sans modifier le code qui a initialement enregistré les rappels.Sinon, votre suggestion fonctionnerait bien.Merci pour la suggestion et pour avoir aidé à clarifier ce que je recherche.Peut-être que je dois accéder à la source de jquery et comprendre comment ces rappels sont stockés en interne.Peut-être que je devrais changer la question en « Est-il possible de faire cela sans modifier jquery ? »

Était-ce utile?

La solution

Appeler un événement bind méthode (telle que hover) ne supprime pas les anciens gestionnaires d'événements, ajoute uniquement vos nouveaux événements, donc votre idée de "restaurer" les anciennes fonctions d'événement ne fonctionnerait pas, car elle ne supprimerait pas vos événements.

Vous pouvez ajouter vos propres événements, puis les supprimer sans affecter les autres événements, puis utiliser l'espace de noms des événements : http://docs.jquery.com/Events_(Guide)#Namespacing_events

Autres conseils

Je ne sais pas si cela fonctionnera, mais vous pouvez essayer ceci :


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

Sinon, cela vous donnera peut-être des idées.

Je ne sais pas si c'est ce que vous voulez dire, mais vous pouvez lier des événements personnalisés puis les déclencher.

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

Ajoutez donc votre événement de survol, scriptez la fonctionnalité dont vous avez besoin pour ce survol, puis déclenchez votre événement personnalisé.

Peut-être serait-il plus facile de simplement masquer l'ancien élément et de créer un clone avec vos gestionnaires d'événements attachés ?Ensuite, revenez simplement à l'ancien élément lorsque vous avez terminé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top