Варианты решения в порядке «чистоты»:
1) переработать код так, чтобы повторные биндинги не происходили
2) вызывать .off. Если есть вероятность, что на одном элементе есть разные обработчики одного типа эвентов, то посмотреть в сторону
api.jquery.com/event.namespace
3) Проверять, есть ли уже нужный нам биндинг. Такой способ, например:
jQuery._data($(SELECTOR)[0], 'events').EVENT_TYPE вернет массив забиндиных эвентов выбранного типа. если его длинна >= 1, то снова биндить не нужно. Опять же, namespaces, как и во втором варианте
Пример
var isBound($element, event) {
var events = jQuery._data($element[0], 'events').event;
if (events && events.length) {
return true;
} else {
return false;
}
}
if (!isBound($('#button'))) {
$('#button').on('click', function);
}