Показать сообщение отдельно
  #6 (permalink)  
Старый 11.01.2018, 21:45
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,726

<input type="file" multiple id="files" accept="image/*"/>
<div id="result"></div>
<style>.thumbnail{max-width:100px;}</style>
<script>
(function(){
  if(!window.File || !window.FileList || !window.FileReader) 
    return console.log("Your browser does not support File API");

  document.getElementById("files").addEventListener("change", function(event) {
    var files = event.target.files,
        output = document.getElementById("result");

    output.innerHTML = '';
    for(var i = 0; i < files.length; i++) {
      var file = files[i];
      if(!file.type.match('image')) 
        continue;

      var picReader = new FileReader();
      picReader.addEventListener("load", function(event) {
        var picFile = event.target;
        var div = document.createElement("div");
        div.className = 'img_preview';
        div.innerHTML = "<img class='thumbnail' src='" 
          + picFile.result + "'" + "title='" + picFile.name + "'/>";
        output.insertBefore(div, null);
      });
      picReader.readAsDataURL(file);
    }
  });
})();
</script>

Сейчас скрипт работает правильно, он всегда отрисовывает только действительно выбранные изображения, которые и будут отправлены на сервер.

Чтобы реализовать возможность последовательного/поочередного выбора изображений для загрузки нужно либо сохранять выбранные пользователем изображения в переменной и отправлять их на сервер скриптом, либо каждый раз клонировать поле выбора файла (в этом случае обработчик лучше делегировать ближайшему родителю).
Ответить с цитированием