Подтвердить что ты не робот

Есть ли способ предотвратить событие по умолчанию, а затем запустить его снова с помощью jQuery?

В основном у меня есть анкерный элемент, <a href='bla..'>link</a>

При щелчке, я сначала хочу что-то сделать, и только после этого я хочу, чтобы пользователь зашел на страницу, на которую он ссылается. Что-то вроде:

$('a').click(function(ev){
   ev.preventDefault();

   //do something here

   ev.refireDefault();
});

Любые предложения? Спасибо!

РЕДАКТИРОВАТЬ: Мои извинения! Мой FireFox решил кэшировать предыдущую версию JS, поэтому ничего, что я пробовал, работал, пока простой CTRL + F5 не решил проблему. Спасибо всем за ваши ответы. Я дал +1 всем, кто сказал, что preventDefault() не нужен и выбрал ответ Скотта, так как у него было наименьшее количество очков. Надеюсь, это справедливо.

4b9b3361

Ответ 1

Javascript не является многопоточным. Он управляется событиями, и события срабатывают в том порядке, в котором вы их загружаете. Поэтому, если вы просто не укажете ev.preventDefault() в своем событии click, он не будет запускать действие по умолчанию, пока функция не выйдет.

См. здесь jsFiddle


РЕДАКТИРОВАТЬ за комментарий @Greg:

Единственный сценарий, в котором приведенное выше неверно, - это асинхронные функции. В этом сценарии вы хотите сначала предотвратить действие по умолчанию, а затем в асинхронной функции обратного вызова, перезапустить действие по умолчанию.

Ответ 2

preventDefault отмечает событие как обработанное, так что, когда функция щелчка завершается, действие по умолчанию не выполняется. Если вы не вызываете preventDefault, действие click click по умолчанию не будет вызвано до тех пор, пока функция щелчка не выйдет. Поэтому удалите его, и он будет работать, как вы предлагаете.

Ответ 3

Ссылка не будет продолжаться до тех пор, пока работа не будет выполнена, поэтому вы можете сделать:

$('a').click(function(ev){
   //do something here
});

Ответ 4

после выполнения желаемого действия, почему бы вам просто не перенаправить его на страницу, добавив эту строку:

window.location = 'welcome.php';

Ответ 5

Это можно сделать следующим образом:

<a onclick="JavaScriptCodeHere; return true;" href='bla..'>link</a>

1) onclick должен быть до href.

2) return true; гарантирует, что пользователь будет отправлен на связанную страницу после выполнения вашего JS-кода. Если вы используете return false; - связанный сам не будет работать, он просто запускает ваш JavaScript на клике;