2010-06-24 201 views
0

我的onclick事件下载有问题。当我点击链接时,它不想触发。它正常进行。但它确实与外部链接一起工作。我做了什么明显错误的?onclick不能触发下载

<a href="http://www.wildlifetrusts.org/" target="_blank" onclick="trackExternalLink(this, '/links-the_royal_society_of_wildlife_trusts');">Royal Society of Wildlife Trusts.</a> 
<a href="/c2/uploads/our strategy for 2010_15.pdf" target="_blank" onclick="trackExternalLink(this, '/downloads-our_strategy_for_2010-15');">2010-2015 strategy,</a> 

它做在FF,Chrome和IE一样8

function trackExternalLink(link, action) { 
_gaq.push(['_trackPageview', action]); 
setTimeout('document.location = "' + link.href + '"', 25000) 
return false; 
} 
+0

什么浏览器? – 2010-06-24 15:09:27

+0

我们是否也可以看到正在调用的关联脚本? – bpeterson76 2010-06-24 15:10:54

回答

0

我相信你需要返回false,防止点击来自正常运行,这可能,但是,是具体的jQuery 。

我还建议使用框架而不是onclick属性,它们很混乱,框架也会在其他方面有所帮助。

+0

我在我的函数中返回false。我以前是在线的,但没有区别。 – YuppieGuppie 2010-06-24 15:36:24

0

您不会从onclick处理程序返回false。你从它调用的函数返回false,但是然后把它扔到处理程序中。你的意思是:

onclick="return trackExternalLink(this, '/links-the_royal_society_of_wildlife_trusts');" 

然而这一切都是onclick的东西很丑。考虑不显眼的脚本。然后输出setTimeout从字符串创建脚本的恶意呼叫。 Google真的推荐这个代码吗?它有点糟糕。

这里有一个快速破解版本,包装了行动统一到一个类名:

<a href="http://www.wildlifetrusts.org/" class="ping-links-the_royal_society_of_wildlife_trusts">Royal Society of Wildlife Trusts.</a> 

<script type="text/javascript"> 
    for (var i= document.links.length; i-->0;) 
     if (document.links[i].className.substring(0, 5)==='ping-') 
      document.links[i].onclick= pingclick; 

    function pingclick() { 
     var action= this.className.substring(5); 
     var href= this.href; 

     _gaq.push(['_trackPageview', action]); 
     setTimeout(function() { 
      location.href= href; 
     }, 25000); 

     return false; 
    } 
</script> 

这仍然不是很大。 25秒(25000)显然是的方式太长时间了;你可能想把它拉下来大概200ish。实际上,只要将信息传递到服务器的XMLHttpRequest完成,而不是使用任意延迟,就应该遵循链接,但Google似乎没有给出该选项。多穷。再次,链接跟踪pingback脚本无论如何都是一个令人讨厌的,用户敌对的活动。