2012-12-28 12 views
20

Eventuali duplicati:
test if event handler is bound to an element in jQueryCome verificare se l'elemento ha un gestore di clic?

cercato di fare il seguente (link è jQuery oggetto di 'un' 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 

utilizzando jQuery-1.8.3

Quindi, come verificare se l'elemento ha il gestore di clic?

+4

Come è stato assegnato il gestore di clic? – AmShaegar

+1

sei sicuro collegamento viene selezionato correttamente – NimChimpsky

+0

Handlers assegnati con link.click (... qualche funzione ...) diverse volte, perché non posso controllare se esiste già. E così i gestori hanno eseguito più volte – kostepanych

risposta

34

È possibile utilizzare jQuery._data per verificare gli eventi. Il primo argomento dovrebbe essere un riferimento all'elemento HTML, non all'oggetto jQuery.

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

esempio.

$(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>

Si noti inoltre che questo metodo per gli eventi di controllo funziona solo quando l'evento è legato tramite jQuery. Se l'evento è legato tramite element.attachEventListener, element.onclick, <a onclick="doStuff()"> o in qualsiasi altro modo non jQuery, questo non funzionerà. Se ti stai adattando a questa barca, controlla this answer.

+0

@Blossoming_Flower Puoi elaborare? Questo funziona per me su jQuery versioni 2.1.3 e 1.11.0. – Snuffleupagus

+0

Le mie scuse, è stato un errore da parte mia. Ho cancellato il mio commento. –

+0

@ Ionian316 'undefined == false' quindi' if (ev && ev.click) 'fa la stessa cosa. – Snuffleupagus

Problemi correlati