2013-10-08 78 views
12

类似HTML anchor link - href and onclick both?后,我的是:HTML锚标记的onclick()和HREF同时执行

<a href="/tmp/download.mp3" onclick="update();">Download link</a> 

update()方法将发送另一个HTTP GET方法对服务器更新的文件已被下载和更新数据库。从HTML代码中,有2个GET请求被一起触发,只有一个会从服务器获得响应(href下载响应)。 update()未被执行。有什么方法可以让我的GET方法被执行吗?欢迎使用Javascript和Jquery的建议!

+0

我想你将不得不分解功能。我建议摆脱href并让update()调用写入数据库,然后弹出一个窗口来下载文件。 – Snowburnt

+0

您可以在update()函数中使用延迟,使用setTimeout(function(){}) –

+0

先单击'然后'href'。它的默认行为 –

回答

22

忘掉href,只需在点击功能中完成所有操作。更新完成后,您可以导航到另一个页面。这是我的JQuery建议:

HTML

<a id="download" href="/tmp/download.mp3">Download link</a> 

的JavaScript(用jQuery)

$("#download").click(function(e){ 
    e.preventDefault();//this will prevent the link trying to navigate to another page 
    var href = $(this).attr("href");//get the href so we can navigate later 

    //do the update 

    //when update has finished, navigate to the other page 
    window.location = href; 
}); 

注:我在id添加了a标签,以确保它能够准确地通过JQuery选择

+4

我会离开'href',因为它是以前的,然后使用'this.href'来更新'window.location'在事件处理程序中。如果每页有多个下载链接(很可能),那么切换到使用类而不是ID选择器更容易,并且还允许任何没有启用JavaScript的人使用(部分)功能。 –

+0

@AnthonyGrist:好的,我会在 – musefan

+0

@AnthonyGrist中编辑:虽然'update'代码是用回调函数完成的,那么'this'可能会失去其原来的含义:我会再次更新 – musefan