2010-02-08 5 views
8

Tengo algunos elementos con una función vinculada al evento click. Quiero vincular la misma función en su lugar a los eventos mouseover y mouseout. ¿Es posible obtener una referencia al evento click para poder asignarlo a esos otros eventos? Me estoy imaginando algo como esto (en el interior each()):jQuery: ¿Puedo obtener una referencia a los eventos enlazados en un elemento?

$(this).bind('mouseover', $(this).click()); 
$(this).bind('mouseout', $(this).click()); 
$(this).unbind('click'); 

preguntas que puede hacer

¿Por qué no basta con cambiar el código que es vinculante para el evento de clic?

El JS que está poniendo esto es parte de un módulo de Drupal (DHTML Menu, si tienes curiosidad), por lo que no quieren cambiar el código del módulo, ya que será eliminado cuando el módulo se actualiza inevitablemente en el futuro. También estoy usando el controlador click para otras partes de la página; solo quiero moverlo a mouseover y mouseout para un menú.

+1

similares a http://stackoverflow.com/questions/516265/jquery-unbind-event-handlers-to-bind-them-again-later. –

Respuesta

13

En jQuery, todos los eventos vinculados por jQuery se almacenan en data en la clave events. El siguiente sería hacer lo que quiera:

var $this = $(this), 
    events = $this.data('events'); 
if(events && events['click']){ 
    // Loop through each click event bound to this control 
    $.each(events['click'], function(){ 
    // this = the function 
    $this.bind('mouseover mouseout', this); 
    }); 
    // Finally, remove all `click` handlers with one call 
    $this.unbind('click'); 
} 
+9

Solo para referencia futura de otros, esto se ha eliminado en jquery 1.8. .data ('eventos') no está disponible. –

+8

en jquery 1.8, aún puede acceder al diccionario de eventos con '$ ._ data (elemento," eventos ")', pero eso puede cambiar en cualquier momento. – hughes

+0

¿Qué pasa si quiero encontrar todos los eventos vinculados no solo por jQuery sino también por otros métodos/procesos? –

3

Prueba esto:

jQuery('#element').data('events'); 

También puede hacer esto:

jQuery.each(jQuery('#element').data('events'), function(i, event){ 
    jQuery.each(event, function(i, eventHandler){ 
     console.log("The handler is " + eventHandler.toString()); 
    }); 
}); 
Cuestiones relacionadas