J'ai quelques éléments avec une fonction liée à l'événement de click
. Je souhaite lier cette même fonction aux événements mouseout
et mouseout
. Est-il possible d'obtenir une référence à l'événement de clic afin que je puisse l'attribuer à ces autres événements? J'imagine quelque chose comme ça (à each()
intérieur de each()
):
$(this).bind('mouseover', $(this).click()); $(this).bind('mouseout', $(this).click()); $(this).unbind('click');
Questions que vous pourriez poser
Pourquoi ne modifiez-vous que le code qui l'associe à l'événement de clic?
Le JS qui l'installe fait partie d'un module Drupal ( Menu DHTML , si vous êtes curieux), donc je ne veux pas modifier le code du module car il sera effacé lorsque le module sera mis à jour inévitablement à l'avenir. J'utilise également le gestionnaire de click
pour d'autres parties de la page. Je ne veux que le déplacer vers le mouseover
et le click
de mouseover
pour un menu.
Dans jQuery, tous les événements liés par jQuery sont stockés dans les data
sous les events
clés. Ce qui suit consiste à faire ce que vous voulez:
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'); }
Essaye ça:
jQuery('#element').data('events');
Vous pouvez également le faire:
jQuery.each(jQuery('#element').data('events'), function(i, event){ jQuery.each(event, function(i, eventHandler){ console.log("The handler is " + eventHandler.toString() ); }); });