jQuery .on("click") 总是在 <a> href 触发之前运行吗?

22
$("a").on("click", function (e) {
    doSomething();
});
...
<a href="http://website.com">My Link</a>

doSomething()会在每个浏览器中都在"href"之前运行吗?


1
是的。如果绑定了点击事件,则其返回值控制是否有后续导航。 - Alex K.
3个回答

22

是的,你的处理程序将始终首先运行。这就允许你在必要时取消默认行为(导航到href url)。

$("a").on("click", function (e) {
   e.preventDefault(); // --> if this handle didn't run first, this wouldn't work
   doSomething();
});

为了澄清,即使e.preventDefault()在处理程序的最后,经过了很多代码,它仍然会取消href的触发吗? - D.Tate
1
尽管如此,在您的点击函数中,如果正在将跟踪信息推送到另一台服务器,则似乎并非如此。使用 Fiddler,我在链接被跟随之前看不到任何推送。使用 OnClick 始终会进行推送,然后跟随链接。使用 on 和 click 始终会跟随链接,而不将数据推送到其他地方。 - Jag

3
是的,它可以。如果您不希望href触发,您可以调用e.preventDefault();,浏览器就不会跟随该链接。

1

是的,但仅限于第一个await之前的部分:

$("a").on("click", async function(e) {
  example(); // this will always run

  await Promise.resolve();

  example3(); // this may not run, as it is after the first `await`, and it is after nagivation
  e.preventDefault(); // this does not work, as it is after the first `await`
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接