2010-05-20 9 views
8

assez gênant combien de temps que je passe à essayer d'obtenir de télécharger un fichier zip à partir d'un bouton ....jQuery télécharger un fichier zip à partir d'un bouton?

<button type='button' id='button-download'>download zipfile</button> 


$("#button-download").live("click", function() { 
    $.get("http://localhost/admin/zip/002140.zip"); // doesn't work? 
}) 

Je besoin d'une preuve quelque chose balle ici, voilà pourquoi je demande ici, merci.

Répondre

7

Utilisez une plaine:

<a href="http://localhost/admin/zip/002140.zip" id="button-download">download zipfile</a> 
lien

. Ensuite, cela fonctionnera bien ("preuve de balle" même) sans JavaScript disponible. Il offre également plus d'avantages traditionnels que les utilisateurs peuvent attendre d'un lien de téléchargement, tels que le clic droit-enregistrer-en, ou glisser-déposer.

Vous pouvez bien sûr utiliser CSS pour le faire ressembler à un bouton au lieu d'un lien. Mais ce que est effectivement est, est un lien. C'est comme ça que ça devrait être balisé.

+0

Merci Je l'utilise comme la sauvegarde sous "problèmes de téléchargement?" C'est en JavaScript mais c'est un panneau d'administration et mes utilisateurs ont besoin de JavaScript activé partout. – FFish

5

Vous devez définir la propriété location.href pour provoquer la navigation:

$("#button-download").live("click", function() { 
    location.href = "http://localhost/admin/zip/002140.zip"; 
}); 

Vous pourriez aussi avoir un simple élément <a>, de style comme si elle était un bouton, de cette façon, même les utilisateurs qui ont désactivé les scripts JavaScript seront capable de télécharger le fichier.

+0

Gee, location.href, il est temps d'aller au lit! – FFish

+0

En fait, j'ai un problème, lors de l'utilisation de ceci ou de window.location je perds mon DOM créé par jQuery. Ce n'est pas un problème si ce qui est pire, la page va -1, comme frapper le bouton de retour? WTF ?? – FFish

+0

Si vous visitez ici 5 ans après ce post, '.live()' a été supprimé dans jquery 1.9, alors utilisez '.on()'. (merci PaparazzoKid ci-dessous) –

1

Cela envoie une requête AJAX.

Je n'ai pas essayé cela, mais cela devrait fonctionner en théorie. Si vous essayez d'accéder à l'emplacement d'un fichier téléchargé, il vous invite à télécharger plutôt qu'à vous rediriger vers cette page.

<button type='button' id='button-download'>download zipfile</button> 


$("#button-download").live("click", function() { 
    window.location = "http://localhost/admin/zip/002140.zip"; 
}) 
+1

Pour les futurs surfeurs, au lieu de '.live()', utilisez '.on()'. '.live()' a été supprimé dans jQuery 1.9. – TheCarver

1

Peu en retard à la fête mais j'ai pensé partager ma solution comme personne d'autre.

Vous pouvez avoir le meilleur des deux mondes; un simple lien HTML et une fonction JS, sans perdre les utilisateurs non-JS.

<a id="download" href="http://www.example.com/download.zip">Download</a> 

$("#download").on("click", function(e) { 

    // cancel the link's original functionality 
    e.preventDefault(); 

    // do something before downloading 
    alert("Thanks for downloading!"); 

    // download file 
    location.href = "http://www.example.com/download.zip"; 

});