Ваша onFileUploadStatusChange
функция не может проверить отмененные файлы.
Способ проверки загрузки всех файлов осуществляется с помощью методов API: getInProgress
и getUploads
. Если у нас 0 загрузок и 0 неудачных выгрузок, мы можем с уверенностью предположить, что все файлы были загружены. Возможно, вам захочется удалить проверку на неудачные загрузки, если вы все равно хотите продолжить, если какая-либо загрузка не удалась. Мы проверяем выполнение этих условий во время обратных вызовов onStatusChange
и onComplete
. Событие onStatusChange
должно только проверять, был ли файл отменен, поскольку это может означать, что все файлы других завершены, и, таким образом, пользовательское действие может быть завершено.
Примечание: Я адаптировал свой ответ 16989719 для работы с отличным загрузчиком, отличным от jQuery.
function init() {
var uploader;
function check_done() {
// Alert the user when all uploads are completed.
// You probably want to execute a different action though.
if (allUploadsCompleted() === true) {
window.alert('All files uploaded');
}
}
function allUploadsCompleted() {
// If and only if all of Fine Uploader's uploads are in a state of
// completion will this function fire the provided callback.
// If there are 0 uploads in progress...
if (uploader.getInProgress() === 0) {
var failedUploads = uploader.getUploads({ status: qq.status.UPLOAD_FAILED });
// ... and none have failed
if (failedUploads.length === 0) {
// They all have completed.
return true;
}
}
return false;
}
uploader = new qq.FineUploader({
element: document.getElementById('button-selectfiles'),
request: {
endpoint: '/Up/UploadFile'
},
callbacks: {
onStatusChange: function (id, oldStatus, newStatus) {
// This will check to see if a file that has been cancelled
// would equate to all uploads being 'completed'.
if (newStatus === qq.status.CANCELLED) {
check_done();
}
},
onComplete: check_done
}
});
};
Его весьма словесные, я бы ожидать, что это из коробки, но благодаря очень , Это лучше и надежнее:) – vmachacek
API развился с тех пор, и ответ @ denala является правильным решением. –