Actualización 24 de agosto '12 : en jQuery 1.8, ya no es posible acceder a los eventos del elemento utilizando .data('events')
. (Consulte este error para obtener más detalles). Es posible acceder a los mismos datos con jQuery._data(elem, 'events')
una estructura de datos interna, que no está documentada y, por lo tanto, no se garantiza que permanezca estable al 100%. Sin embargo, esto no debería ser un problema, y la línea relevante del código del complemento anterior se puede cambiar a lo siguiente:
var data = jQuery._data(this[0], 'events')[type];
Los eventos jQuery se almacenan en un objeto de datos llamado events
, por lo que puede buscar en esto:
var button = $('#myButton');
if (-1 !== $.inArray(onButtonClicked, button.data('events').click)) {
button.click(onButtonClicked);
}
Sería mejor, por supuesto, si pudiera estructurar su aplicación para que este código solo se llame una vez.
Esto podría encapsularse en un complemento:
$.fn.isBound = function(type, fn) {
var data = this.data('events')[type];
if (data === undefined || data.length === 0) {
return false;
}
return (-1 !== $.inArray(fn, data));
};
Entonces puedes llamar a:
var button = $('#myButton');
if (!button.isBound('click', onButtonClicked)) {
button.click(onButtonClicked);
}