FileReader不会从多个文件渲染图像

时间:2018-01-15 14:34:10

标签: javascript jquery

我有这种多类型文件输入,然后当onChange事件被触发到输入文件然后它将循环遍历每个文件然后创建一个FileReader()然后渲染每个文件到一个图像,但似乎它只渲染第一个而不是每个文件,任何想法,请帮忙吗? 
 
 document.querySelector("输入&#34)
     .onchange = function(e){
       for(var i = 0; i< e.target.files.length; i ++){
         var img = document.createElement(" img");
 
         var reader = new FileReader();
         reader.onload = function(e){
             img.src = e.target.result;
             document.body.appendChild(IMG);
         }
         reader.readAsDataURL(e.target.files [I]);
       }
     }
 IMG {
 宽度:50像素;
 }
 < script src =" https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">< / script>
 
 < input type =" file"多个>&LT峰; br>&LT峰; br>&LT峰; br>
 
 

1 个答案:

答案 0 :(得分:0)

FileReader异步返回结果。您可以创建一个在for循环中使用的闭包来处理每个文件。



document.querySelector("input")
  .onchange = function(e) {
    for (var i = 0; i < e.target.files.length; i++) {
      // use IIFE as a closure
      (function(file) {
        var img = document.createElement("img");
        var reader = new FileReader();
        reader.onload = function(e) {
          img.src = e.target.result;
          document.body.appendChild(img);
        }
        reader.readAsDataURL(file);
      })(e.target.files[i]); // pass current File to closure 
    }
  }
&#13;
img {
  width: 50px;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="file" multiple><br><br><br>
&#13;
&#13;
&#13;