2010-02-08 2 views
8

У меня есть некоторые элементы с функцией, связанной с событием click. Я хочу привязать эту же функцию к событиям mouseover и mouseout. Можно ли получить ссылку на событие click, чтобы я мог назначить его другим событиям? Я себе что-то вроде этого (внутри each()):jQuery: Можно ли получить ссылку на связанные события на элементе?

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

Вопросы Вы можете спросить

Почему вы не просто изменить код, который связывающую его на событие щелчка?

JS, который ее настройка является частью модуля Drupal (DHTML Menu, если вам интересно), так что я не хочу, чтобы изменить код модуля, поскольку он будет уничтожен, когда модуль неизбежно обновляются в будущем. Я также использую обработчик click для других частей страницы - я хочу только переместить его на mouseover и mouseout для одного меню.

+1

Подобно http://stackoverflow.com/questions/516265/jquery-unbind-event-handlers-to-bind-them-again-later. – 2010-02-08 18:14:47

ответ

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

Для справки о будущем будущего, это было отброшено в jquery 1.8. .data ('events') недоступно. –

+8

в jquery 1.8, вы все равно можете получить доступ к словарю событий с '$ ._ data (element," events ")', но это может измениться в любое время. – hughes

+0

Что делать, если я хочу найти все события, связанные не только с jQuery, но и с другими методами/процессами. –

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()); 
    }); 
}); 
Смежные вопросы