2010-02-08 11 views
8

Mam niektóre elementy z funkcją związaną z wydarzeniem click. Chcę związać tę funkcję zamiast zdarzeń mouseover i mouseout. Czy można uzyskać odwołanie do zdarzenia kliknięcia, aby móc je przypisać do innych wydarzeń? Wyobrażam sobie coś takiego (wewnątrz each()):jQuery: Czy mogę uzyskać odwołanie do powiązanych zdarzeń na elemencie?

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

pytania można zadać

Dlaczego nie można po prostu zmienić kod, który jest wiążący go do zdarzenia click?

JS że jest to ustawienie w górę jest częścią modułu Drupal (DHTML Menu, jeśli jesteś ciekawy), więc nie chcę, aby zmienić kod modułu, ponieważ zostanie ona zniszczona, gdy moduł jest aktualizowany w sposób nieunikniony w przyszłości. Używam również obsługi strony click do innych części strony - chcę tylko przenieść ją do mouseover i mouseout dla jednego menu.

+1

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

Odpowiedz

13

w jQuery, wszystkie zdarzenia związane przez jQuery są przechowywane w data pod klucz events. Poniższa by robić to, co chcesz:

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

Tylko dla przyszłego odniesienia dla innych, zostało to usunięte w jquery 1.8. .data ("events") nie jest dostępny. –

+8

w jquery 1.8, nadal możesz uzyskać dostęp do słownika zdarzeń z '$ ._ data (element," events ")', ale to może się zmienić w dowolnym momencie. – hughes

+0

Co jeśli chcę znaleźć wszystkie zdarzenia związane nie tylko przez jQuery, ale również inne metody/procesy. –

3

Spróbuj tego:

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

Można też to zrobić:

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