Atualização 24 de agosto '12 : No jQuery 1.8, não é mais possível acessar os eventos do elemento usando .data('events')
. (Veja este bug para obter detalhes.) É possível acessar os mesmos dados com jQuery._data(elem, 'events')
uma estrutura de dados interna, que não é documentada e, portanto, não tem 100% de garantia de permanecer estável. No entanto, isso não deve ser um problema, e a linha relevante do código do plug-in acima pode ser alterada para o seguinte:
var data = jQuery._data(this[0], 'events')[type];
Os eventos do jQuery são armazenados em um objeto de dados chamado events
, para que você possa pesquisar:
var button = $('#myButton');
if (-1 !== $.inArray(onButtonClicked, button.data('events').click)) {
button.click(onButtonClicked);
}
Seria melhor, é claro, se você pudesse estruturar seu aplicativo para que esse código seja chamado apenas uma vez.
Isso pode ser encapsulado em um 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));
};
Você pode ligar para:
var button = $('#myButton');
if (!button.isBound('click', onButtonClicked)) {
button.click(onButtonClicked);
}