在点击href之前确保点击运行jQuery

时间:2015-10-05 20:54:17

标签: javascript jquery

是否可以确保在将用户转发到外部URL之前执行jQuery on click事件?我现在谷歌搜索了2个小时,并在stackoverflow上阅读了几个帖子。我不能让这个工作。

这是我尝试过的:

HTML:

<a href="http://www.example.com/" class="external-url">Click me</a>

JS:

$('.external-url').on("click", function (e) {
  e.preventDefault();

    if (myCustomEvent()) {
      window.location = this.href;
    }
});

function myCustomEvent()
{
    setTimeout(function() {
        console.log('Execute some custom JS here before a href firing...');
        return true;
    }, 3000);
}

但它似乎就是&#34; if(myCustomEvent()){&#34;在myCustomEvent函数能够返回true之前被执行。有一个更好的方法吗?还有一种实际有用的方法吗?

1 个答案:

答案 0 :(得分:3)

jQuery点击事件在位置发生变化之前运行 - 但您在点击处理程序中间执行了异步操作。最简单的方法是将您想要发生的事情传递到myCustomEvent,粗略地说:

$('external-url').on("click", function (e) {
  var url = this.href;

  e.preventDefault();

  myCustomEvent(function() {
    window.location = url;
  });
});

function myCustomEvent(fn) {
  setTimeout(function() {
    console.log('Execute some custom JS here before a href firing...');
    fn();
  }, 3000);
}

根据您的实际要求,还有其他方法可以解决这个问题。