1

Уже несколько часов "бьюсь" над поставленным вопросом. С загрузкой одного файла проблем нет. А вот когда пытаюсь загрузить несколько - загружается (считывается) только последний, а остальные "проскакиевает". html

<form>
<input type="file" multiple>
</form>
<button type="button" id="btn">Принять</button>

js

var btn = document.getElementById("btn");
var input = document.forms[0][0];
btn.onclick = function(){
        if (input.files.length > 0){
            for (var i=0; i<input.files.length; i++) {
            var read = new FileReader();
            read.readAsDataURL(input.files[i]);
            read.onload = function(){
                console.log(read.readyState);
                console.log(read.result);
                }
            }
        } else {
            alert("Сделайте выбор")
        }
};

Я так понял, что событие onload генерируется, когда будет загружен последний файл. А как отловить загрузку всех предыдущих файлов?

Dmytro
  • 6,756
  • 1
    Вообщем, по всей видимости, все дело в асинхронности. Процесс чтения файла выделил в отдельную функцию и в цикле запускал эту функцию, передавая в нее файл. Все заработало. Но вот на счет дубликата вопроса...у меня есть сомнения. Перед тем как задать вопрос - гуглил. Вообще, нигде ни слова о сути проблемы (на русскоязычных сайтах). При таком подходе, как мне кажется, 50% вопросов можно считать повторением. Но за наводку, спасибо! – Dmytro Nov 08 '17 at 13:03
  • Дубликат 100%. В цикле ты создаешь функцию, которая замыкает значение переменной read. В момент когда функция будет выполняться цикл уже закончится и значением переменной read будет значение на последней итерации цикла. Используешь любое решение из вопроса дубликата, например let read = ... и все заработает – Grundy Nov 08 '17 at 13:59

0 Answers0