Я перестраиваю функцию загрузки нескольких изображений.
Но я столкнулся с проблемой, что fileReader () выполняется после всего цикла.
Внутри цикла я клонирую каждое перетаскиваемое изображение, которое ожидает контейнер. Этот контейнер имеет класс и идентификатор "clonemulti". Внутри этого контейнера находится контейнер «file-return», который тоже клонируется.
Например, я перетаскиваю в поле ввода файла 3 изображения. Цикл проходит, функция ParseFile () добавляет к каждому «возврату файла» шаг за шагом значения для имени и размера каждого изображения (1,2,3), но функция setupReader () добавляет все изображения только к последний (3) контейнер.
var files = e.target.files || e.dataTransfer.files;
$('.clonemulti').slice(1).remove();
for (var i = 0, f; f = files[i]; i++) {
if(i > 0){
$newimg = $('#clonemulti').clone();
$newimg.removeAttr('id');
$newimg.find('.file-return p').remove('p');
$newimg.insertAfter( ".clonemulti:last" );
}
$('.filenameauto').last().val(f.name);
ParseFile(f);
setupReader(f);
}
function ParseFile(file) {
String.prototype.trunc = String.prototype.trunc ||
function(n){
return (this.length > n) ? this.substr(0, n-1) + '…' : this;
};
var filenametrunc = file.name.trunc(25);
fileinputappend =
"<p class='center'><span class='imagesrc'></span><br/> <strong>" + filenametrunc +
"</strong> size: <strong>" + Math.round(file.size /1000) +
"</strong> Kb</p>";
$( fileinputappend ).appendTo( '.file-return:last' );
}
function setupReader(file) {
var reader = new FileReader();
reader.onload = function(event) {
$($.parseHTML('<img>')).attr('src', event.target.result).appendTo('.imagesrc:last');
}
reader.readAsDataURL(file);
}
Как я могу обработать выполнение функции setupReader () и добавить изображения в последний класс "file-return" "imagesrc", как это делает функция ParseFile ()?
Это скрипка примера:
https://jsfiddle.net/3xtg6hew/1/