Добавить IMG из FileReader в последний класс | FileReader выполняется после цикла - PullRequest
0 голосов
/ 09 мая 2019

Я перестраиваю функцию загрузки нескольких изображений.

Но я столкнулся с проблемой, что 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/

1 Ответ

0 голосов
/ 10 мая 2019

Я решил проблему самостоятельно, создав собственный цикл, где я зацикливал каждый класс и добавлял туда изображение:

    function setupReader(file) {
        var z = 0;
        $('.imagesrc').each(function(){
            var reader = new FileReader();
            var thisclass = $(this);

            reader.onload = function(event) {

                var appendattr = $($.parseHTML('<img>')).attr('src', event.target.result);
                $(thisclass).append(appendattr);

            }
           reader.readAsDataURL(file[z]);

           z++;

        })

    }
...