2012-12-28 10 views
20

Powiel możliwe:
test if event handler is bound to an element in jQueryJak sprawdzić, czy element obsługuje funkcję obsługi kliknięć?

Próbowano wykonać następujące czynności (odnośnik jest jQuery przedmiot 'a' tag):

link.data("events") //undefined even if link has event handlers 
jQuery.data(link, 'events') //undefined always also 
jQuery._data(link, 'events') //undefined always also 

użyciu jQuery 1.8.3

Jak sprawdzić, czy element obsługuje funkcję obsługi kliknięć?

+4

W jaki sposób przyporządkowałeś obsługę kliknięcia? – AmShaegar

+1

czy jesteś pewien, że link jest poprawnie wybrany – NimChimpsky

+0

Handlery przypisane link.click (... niektóre funkcje ...) kilka razy, ponieważ nie mogę sprawdzić, czy już istnieje. I tak, że programy obsługi wykonywane kilka razy – kostepanych

Odpowiedz

34

Możesz użyć jQuery._data, aby sprawdzić zdarzenia. Pierwszym argumentem powinno być odniesienie do elementu HTML, a nie do obiektu jQuery.

var ev = $._data(element, 'events'); 
if(ev && ev.click) alert('click bound'); 

Próbka poniżej.

$(function(){ 
 
    $('#test').click(function(){ 
 
     // NOTE: this below is refering to the HTML element, NOT the jQuery element 
 
     var ev = $._data(this, 'events'); 
 
     if(ev && ev.click) alert('click bound to this button'); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
 
<button id="test">Click me to check for click handlers</button>

Należy również pamiętać, że ta metoda sprawdzania zdarzeń będzie działać tylko wtedy, gdy zdarzenie jest związany przez jQuery. Jeśli zdarzenie zostanie powiązane za pomocą element.attachEventListener, element.onclick, <a onclick="doStuff()"> lub w inny sposób inny niż jQuery, to nie zadziała. Jeśli pasujesz do tej łodzi, sprawdź: this answer.

+0

@Blossoming_Flower Czy możesz rozwinąć? Działa to dla mnie w jQuery w wersjach 2.1.3 i 1.11.0. – Snuffleupagus

+0

Przepraszam, to był błąd z mojej strony. Usunąłem swój komentarz. –

+0

@ Ionian316 'undefined == false' więc' if (ev && ev.click) 'robi to samo. – Snuffleupagus

Powiązane problemy