Это довольно просто, вы просто делаете следующее:
$('.foo').click(function(e) {
$(this).href = "/bar"; # done something else before the click
return true;
});
Если вы хотите перехватить событие click и не распространять его, просто вместо этого верните false. Я заметил, что вы сделали свой пример более четким, но решение все еще несколько похоже. Вместо того, чтобы возвращать true для распространения события, мы вручную запускаем щелчок, сообщая функции click, чтобы проглотить событие, возвращая false. Код будет выглядеть примерно так:
$('.create_project').click(function(e) {
$.getJSON('/check_user_limit', function(data) {
if (data.allow_to_create_project) {
e.click();
} else {
//modal here
}
}
return false;
});
Однако сделать AJAX-запрос для проверки работоспособности функции обычно не очень хорошая идея. Если сервер уже знает, что пользователь не может создать проект, то почему кнопка нажимается в первую очередь? Вместо этого обновите элемент управления, указав соответствующее состояние.