Reputation: 12205
I have the following javascript:
function downloadFiles(){
var files = [];
files.push('mysite.com/file1.txt');
files.push('mysite.com/file2.txt');
files.push('mysite.com/file3.txt');
for(var ii=0; ii<files.length; ii++){
window.location.href = files[ii];
}
}
The problem is this only downloads the last file in the list because the first two files get overwritten by the last one. How can I wait for the user's input on each file before moving on to the next file?
Upvotes: 4
Views: 28143
Reputation: 2710
old one but the solution for this that I ended up going with is the following
let currentIndex = 0;
const intervalId = setInterval(() => {
if (currentIndex === files.length - 1) clearInterval(intervalId);
window.location.href = files[currentIndex];
currentIndex++;
}, 1000);
Upvotes: 0
Reputation: 12205
What I ended up doing:
function downloadFiles(){
var files = [];
files.push('file1.txt');
files.push('file2.txt');
files.push('file3.txt');
for(var ii=0; ii<files.length; ii++){
downloadURL(files[ii]);
}
}
var count=0;
var downloadURL = function downloadURL(url){
var hiddenIFrameID = 'hiddenDownloader' + count++;
var iframe = document.createElement('iframe');
iframe.id = hiddenIFrameID;
iframe.style.display = 'none';
document.body.appendChild(iframe);
iframe.src = url;
}
Upvotes: 10
Reputation: 1809
If you change your code to use window.open()
instead of window.location
, you can launch all three downloads at the same time.
I know this doesn't satisfy the requirement of waiting on the user's input before presenting each of the downloads, but it does build off of the spirit of your original code. Hopefully it will help a little.
function downloadFiles(){
var files = [];
files.push('file1.txt');
files.push('file2.txt');
files.push('file3.txt');
for(var ii=0; ii<files.length; ii++){
window.open(files[ii]);
}
}
Upvotes: 8