jQuery:我可以获得对元素绑定事件的引用吗?

时间:2010-02-08 18:10:38

标签: javascript jquery

我有一些元素,其函数绑定到click事件。我想将相同的函数绑定到mouseovermouseout事件。是否可以获得对click事件的引用,以便我可以将其分配给其他事件?我在想象这样的事情(在each()内):

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

您可能会提出的问题

为什么不直接更改将其绑定到click事件的代码?

设置它的JS是Drupal模块的一部分(DHTML Menu,如果你很好奇的话),所以我不想更改模块代码,因为它会在模块被清除时被删除将来不可避免地会更新。我还在页面的其他部分使用click处理程序 - 我只想将其移至mouseovermouseout一个菜单。

2 个答案:

答案 0 :(得分:13)

在jQuery中,jQuery绑定的所有事件都存储在密钥data下的events中。以下可以做你想要的:

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');
}

答案 1 :(得分:3)

试试这个:

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

你也可以这样做:

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