Pregunta

He usado jQuery para establecer pase devoluciones de llamada para los elementos en mi página.Ahora estoy escribiendo un módulo que necesita para establecer temporalmente nuevo pase el comportamiento de algunos elementos.El nuevo módulo no tiene acceso al código original para el hover funciones.

Quiero guardar el viejo hover funciones antes de establecer otras nuevas, así que puedo restaurarlos cuando haya terminado con el temporal pase comportamiento.

Yo creo que estos pueden ser almacenados mediante la jQuery.data() función:

//save old hover behavior (somehow)

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

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

//set new hover behavior

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

Hacer cosas con nuevo pase el comportamiento...

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

Pero, ¿cómo puedo obtener el registrado actualmente hover funciones de jQuery?

Shadow2531, estoy tratando de hacer esto sin modificar el código que originalmente registrado las devoluciones de llamada.Tu sugerencia sería que funcione bien lo contrario.Gracias por la sugerencia, y para ayudar a aclarar lo que estoy buscando.Tal vez tengo que ir a la fuente de jquery y averiguar cómo estas devoluciones de llamada se almacenan internamente.Tal vez debería cambiar la pregunta a "¿Es posible hacer esto sin modificar jquery?"

¿Fue útil?

Solución

Llamar a un evento bind método (como hover) no eliminar los antiguos controladores de eventos, sólo agrega los nuevos eventos, así que tu idea de 'restaurar' la vieja funciones de evento no iba a funcionar, ya que no elimine sus eventos.

Usted puede agregar sus propios eventos, y luego eliminarlos sin que afecte a otros eventos, a continuación, utilizar Evento namespacing: http://docs.jquery.com/Events_(Guía)#Namespacing_events

Otros consejos

No estoy seguro si esto va a funcionar, pero puedes probar con este:


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

Si no, tal vez vamos a dar algunas ideas.

No estoy seguro de si esto es lo que quieres decir, pero puede enlazar los eventos personalizados y, a continuación, activar.

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

Para agregar tu evento hover, secuencia de comandos de la funcionalidad que usted necesita para que pase, a continuación, activar su evento personalizado.

Tal vez sería más fácil para ocultar el antiguo elemento y crear un clon con sus controladores de eventos adjuntos?A continuación, sólo intercambio de vuelta en los viejos elemento cuando haya terminado..

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top