Посмотрел твое демо, делай так:
$('button:contains("Скачать выбранные")').on('click', function() {
var zip = new JSZip();
var selector = $(this).data('target');
var inputs = $(selector).find('input:checkbox:checked');
if (inputs.length > 0) {
var deferreds = inputs.map(function(n, element) {
return $.Deferred(function(deferred) {
var fileID = $(element).attr('id').replace('download-docs-', '');
$.ajax({
url: filesObj.params[fileID]['SRC'],
type: 'GET',
xhrFields: { responseType: 'blob' },
dataType: 'binary',
success: function(blob) {
blob.name = filesObj.params[fileID]['NAME'];
zip.file(filesObj.params[fileID]['NAME'], blob);
deferred.resolve(blob);
},
error: function(jqxhr, status) {
deferred.reject(jqxhr);
}
});
});
});
$.when.apply(this, deferreds).done(function(blobs) {
zip.generateAsync({ type: 'blob' }).then(function(blob) {
saveAs(blob, 'files.zip');
}, function(err) {
console.log('Не удалось создать архив:', err);
});
}).fail(function(jqxhr) {
console.log('При скачивании файлов произошла ошибка, один из файлов не скачался:', jqxhr);
});
}
});