usar una termine que manejo leer funcion esperar ejemplo contenido como bootstrap archivos archivo javascript jquery callback

javascript - una - Cómo leer las funciones de devolución de llamada enlazadas en jquery



load jquery ejemplo (4)

Utilicé jquery para establecer devoluciones de llamada estables para elementos en mi página. Ahora estoy escribiendo un módulo que necesita establecer temporalmente un nuevo comportamiento de vuelo estacionario para algunos elementos. El nuevo módulo no tiene acceso al código original para las funciones de desplazamiento.

Quiero almacenar las viejas funciones de desplazamiento antes de configurar nuevas para poder restaurarlas cuando termine con el comportamiento de vuelo estacionario temporal.

Creo que estos pueden almacenarse utilizando la función jquery.data() :

//save old hover behavior (somehow) $(''#foo'').data(''oldhoverin'',???) $(''#foo'').data(''oldhoverout'',???); //set new hover behavior $(''#foo'').hover(newhoverin,newhoverout);

Hacer cosas con un nuevo comportamiento de vuelo estacionario ...

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

Pero, ¿cómo obtengo las funciones de hover actualmente registradas de jquery?

Shadow2531, estoy tratando de hacer esto sin modificar el código que originalmente registró las devoluciones de llamada. Su sugerencia funcionaría bien de lo contrario. Gracias por la sugerencia y por ayudar a aclarar lo que estoy buscando. Tal vez tenga que entrar en la fuente de jquery y descubrir cómo estas devoluciones de llamadas se almacenan internamente. Tal vez debería cambiar la pregunta a "¿Es posible hacer esto sin modificar jquery?"


Llamar a un método de bind eventos (como hover ) no elimina los manejadores de eventos antiguos, solo agrega sus nuevos eventos, por lo que su idea de ''restaurar'' las funciones de eventos anteriores no funcionaría, ya que no eliminaría sus eventos.

Puede agregar sus propios eventos y luego eliminarlos sin afectar a ningún otro evento, luego use el espacio de nombres de eventos: http://docs.jquery.com/Events_(Guide)#Namespacing_events


No estoy seguro de si esto es lo que quieres decir, pero puedes vincular eventos personalizados y luego activarlos.

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

Así que agregue su evento de desplazamiento, script la funcionalidad que necesita para ese vuelo estacionario, luego active su evento personalizado.


No estoy seguro si esto funcionará, pero puede intentar esto:

<!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 te dará algunas ideas.


Tal vez sería más fácil simplemente ocultar el elemento anterior y crear un clon con los controladores de eventos adjuntos. Luego, simplemente vuelve a cambiar el elemento anterior cuando hayas terminado.