Вообще кошмар.
Есть два варианта.
1:
$("a.longProcess").click(function(evt){
var target = $(this);
if (target.hasClass('inactive')) {
evt.preventDefault();
return false;
} else {
target.addClass('inactive');
// стартуем долгий процесс…
}
});
Более правильный вариант 2:
$("span.longProcess").bind('click', generateReport);
var generateReport = function(evt) {
var target = $(this);
target.unbind('click', generateReport).addClass('inactive');
// стартуем долгий процесс…
}
span.longProcess надо CSS-ом привести к виду ссылки.
В обоих случаях надо показать человеку анимацию, что дескать «процесс идет, надо подождать». Главное это, а невозможность запуска еще раз — это так, fool proof.