基本上我有一个锚元素<a href='bla..'>link</a>
点击后,我首先想要做的事情,只有在完成后我才想将用户带到它链接到的页面。类似的东西:
$('a').click(function(ev){
ev.preventDefault();
//do something here
ev.refireDefault();
});
有什么建议吗?
道歉!我的FireFox决定缓存以前版本的JS,所以我尝试过的只是一个简单的CTRL + F5解决了这个问题。
答案 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;