2013-10-08 15 views
12

Simile a HTML anchor link - href and onclick both? postale, il mio è:Html tag anchor onclick() e href eseguire contemporaneamente

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

Il metodo update() avrebbe mandato un altro metodo HTTP GET al server per aggiornare il file che è stato scaricato e aggiornamento il database. Dal codice HTML, ci sono 2 richieste GET che vengono attivate insieme e solo ONE riceverà la risposta (la risposta di download href) dal server. update() non viene eseguito. C'è qualche metodo che posso ottenere entrambi i metodi GET per essere eseguiti? I suggerimenti Javascript e Jquery sono i benvenuti!

+0

Penso che dovrai interrompere la funzionalità. Consiglierei di sbarazzarmi dell'href e di avere la chiamata update() al database e quindi di aprire una finestra per scaricare il file. – Snowburnt

+0

si potrebbe lavorare con un ritardo nella funzione update(), utilizzare un setTimeout (function() {}) –

+0

Primo 'clic' e quindi' href'. È un comportamento predefinito –

risposta

22

Dimentica lo href e fai semplicemente tutto nella funzione clic. È possibile navigare verso un'altra pagina dopo che l'aggiornamento è stato completato. Qui è il mio suggerimento JQuery:

HTML

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

JavaScript (con 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; 
}); 

NOTA: ho aggiunto in un id per il tag a per assicurarsi che può essere selezionato in modo accurato tramite JQuery

+4

Lascerò "href" come era in precedenza, quindi useremo 'this.href' per aggiornare' window.location' nel gestore dell'evento. Se sono disponibili più collegamenti per il download per pagina (alquanto possibile), è più semplice passare all'utilizzo di una classe piuttosto che al selettore di ID e inoltre consente funzionalità (parziali) per chiunque non abbia JavaScript abilitato. –

+0

@AnthonyGrist: Buongiorno, lo modifico in – musefan

+0

@AnthonyGrist: Sebbene, se il codice 'update' è fatto con un callback, allora questo potrebbe perdere il suo significato originale: aggiornerò di nuovo – musefan