Works with any backend npm install Zero dependencies

onQueueComplete Callback

Fires once when all uploads in the queue are finished.

(function() {
 var logEl = document.getElementById('log');
 function log(m) { var d = document.createElement('div'); d.className='pkg-log-entry'; d.textContent=m; logEl.appendChild(d); logEl.scrollTop=logEl.scrollHeight; }
 new MultipleUpload('#demo', {
 uploadUrl: '/api/upload',
 multiple: true,
 onFileAdded: function(t) { log('Queued: ' + t.fileName); },
 onQueueComplete: function(files) {
 log('=== ALL DONE: ' + files.length + ' file(s) uploaded ===');
 }
 });
})();

When everything has finished

onQueueComplete fires once the queue drains, which is the natural moment to re-enable a submit button, close a dialog, refresh a list, or move the user on to the next step.

Finished is not the same as all succeeded

The queue is complete when nothing is left in flight, and that includes files that failed and exhausted their retries. Check the queue's state in the handler rather than assuming: advancing a wizard because “the uploads finished” when two of them failed is a bug the user discovers much later, when the record is missing its attachments.