Aggiornamento 24 agosto '12 : in jQuery 1.8, non è più possibile accedere agli eventi dell'elemento utilizzando .data('events')
. (Vedi questo bug per i dettagli.) È possibile accedere agli stessi dati con jQuery._data(elem, 'events')
una struttura di dati interna, che è priva di documenti e quindi non garantita al 100% per rimanere stabile. Questo non dovrebbe, tuttavia, essere un problema e la riga pertinente del codice del plugin sopra può essere modificata come segue:
var data = jQuery._data(this[0], 'events')[type];
Gli eventi jQuery sono memorizzati in un oggetto dati chiamato events
, quindi è possibile cercare in questo:
var button = $('#myButton');
if (-1 !== $.inArray(onButtonClicked, button.data('events').click)) {
button.click(onButtonClicked);
}
Sarebbe meglio, ovviamente, se potessi strutturare la tua applicazione in modo che questo codice venga chiamato solo una volta.
Questo potrebbe essere incapsulato in un plugin:
$.fn.isBound = function(type, fn) {
var data = this.data('events')[type];
if (data === undefined || data.length === 0) {
return false;
}
return (-1 !== $.inArray(fn, data));
};
È quindi possibile chiamare:
var button = $('#myButton');
if (!button.isBound('click', onButtonClicked)) {
button.click(onButtonClicked);
}