有没有办法防止默认事件,然后用jQuery再次激活它?

Dim*_*kiy 19 javascript jquery javascript-events

基本上我有一个锚元素, <a href='bla..'>link</a>

点击后,我首先想要做的事情,只有在完成后我才想把用户带到它链接到的页面.就像是:

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

   //do something here

   ev.refireDefault();
});
Run Code Online (Sandbox Code Playgroud)

有什么建议?

更新

我很抱歉!我的FireFox决定缓存以前版本的JS,所以我尝试过的只是一个简单的CTRL + F5解决了这个问题.

Cod*_*ick 21

Javascript不是多线程的.它是事件驱动的,事件按照加载它们的顺序触发.因此,如果您只是完全忽略了ev.preventDefault()单击事件,则在函数退出之前不会触发默认操作.

在这里查看jsFiddle


编辑@Greg的评论:

上述情况不正确的唯一情况是异步函数.在这种情况下,您可能希望首先阻止默认操作,然后在异步回调函数中,重新触发默认操作.

  • 这将问题视为X/Y问题......但实际上有必要阻止事件然后重新发送它,例如在事件中发生异步函数时. (5认同)
  • +1对你也是.不知道为什么我们任何人都应该得到一个downvote,答案是没有错的. (2认同)

Laz*_*rus 5

preventDefault将事件标记为已处理,以便在单击函数退出时,不执行默认操作.如果不调用preventDefault,则在单击函数退出之前不会调用默认单击操作.所以删除它,它会像你建议的那样工作.


Dus*_*ine 5

工作完成后,链接将不会发生,因此您可以执行以下操作:

$('a').click(function(ev){
   //do something here
});
Run Code Online (Sandbox Code Playgroud)