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

时间:2011-05-19 15:31:51

标签: javascript javascript-events jquery

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

点击后,我首先想要做的事情,只有在完成后我才想将用户带到它链接到的页面。类似的东西:

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

   //do something here

   ev.refireDefault();
});

有什么建议吗?

更新

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

5 个答案:

答案 0 :(得分:21)

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

<强> See jsFiddle here


根据@ Greg的评论编辑:

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

答案 1 :(得分:5)

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

答案 2 :(得分:5)

直到工作完成后才会进行链接,所以你可以这样做:

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

答案 3 :(得分:4)

执行所需操作后,为什么不通过添加以下行将其重定向到页面:

window.location = 'welcome.php';

答案 4 :(得分:2)

可以这样做:

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

1) onclick 需要 href 之前

2)返回true; 确保在执行JS代码后用户将被带到链接页面。如果你使用return false; - 链接本身将无效,它只会点击你的JavaScript;