Domanda

Ho usato jQuery per impostare i callback al passaggio del mouse per gli elementi sulla mia pagina.Ora sto scrivendo un modulo che deve impostare temporaneamente un nuovo comportamento al passaggio del mouse per alcuni elementi.Il nuovo modulo non ha accesso al codice originale per le funzioni al passaggio del mouse.

Voglio memorizzare le vecchie funzioni al passaggio del mouse prima di impostarne di nuove in modo da poterle ripristinare una volta terminato il comportamento temporaneo al passaggio del mouse.

Penso che questi possano essere archiviati utilizzando il file jQuery.data() funzione:

//save old hover behavior (somehow)

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

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

//set new hover behavior

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

Fai cose con il nuovo comportamento al passaggio del mouse...

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

Ma come posso ottenere le funzioni al passaggio del mouse attualmente registrate da jQuery?

Shadow2531, sto provando a farlo senza modificare il codice che originariamente ha registrato i callback.Altrimenti il ​​tuo suggerimento funzionerebbe bene.Grazie per il suggerimento e per avermi aiutato a chiarire cosa sto cercando.Forse devo entrare nel sorgente di jquery e capire come questi callback sono archiviati internamente.Forse dovrei cambiare la domanda in "È possibile farlo senza modificare jquery?"

È stato utile?

Soluzione

Convocazione di un evento bind metodo (es hover) non elimina i vecchi gestori di eventi, aggiunge solo i tuoi nuovi eventi, quindi la tua idea di "ripristinare" le vecchie funzioni di evento non funzionerebbe, poiché non eliminerebbe i tuoi eventi.

Puoi aggiungere i tuoi eventi e rimuoverli senza influenzare altri eventi, quindi utilizzare lo spazio dei nomi degli eventi: http://docs.jquery.com/Events_(Guide)#Namespacing_events

Altri suggerimenti

Non sono sicuro che funzionerà, ma puoi provare questo:


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

In caso contrario, forse ti darà qualche idea.

Non sono sicuro che questo sia ciò che intendi, ma puoi associare eventi personalizzati e quindi attivarli.

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

Quindi aggiungi il tuo evento al passaggio del mouse, crea lo script della funzionalità di cui hai bisogno per quel passaggio del mouse, quindi attiva il tuo evento personalizzato.

Forse sarebbe più semplice nascondere semplicemente il vecchio elemento e creare un clone con i gestori di eventi allegati?Quindi, quando hai finito, ripristina il vecchio elemento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top