【问题标题】:FileReader Thumbnail Preview On Multiple (single) File Fields多个(单个)文件字段上的 FileReader 缩略图预览
【发布时间】:2018-02-13 13:02:02
【问题描述】:

将 javascript 应用于多个(单个)文件上传字段的最佳方式是什么,目前这在单个字段上效果很好,但针对的是 ID,我假设有一种更优雅的方式来编写 javascript,而不是为每个 ID 重复?:

function PreviewImage() {
  var oFReader = new FileReader();
  oFReader.readAsDataURL(document.getElementById("uploadImage").files[0]);

  oFReader.onload = function(oFREvent) {
    document.getElementById("uploadPreview").src = oFREvent.target.result;
    document.getElementById('uploadPreview-container').style.display = 'block';
  };
};

function ResetImage() {
  document.getElementById('uploadPreview-container').style.display = 'none';
  document.getElementById('uploadImage').value = '';
};
#uploadPreview {
  width: 100px;
}

#uploadPreview-container {
  display: none;
  position: relative;
  width: 100px;
}

#uploadReset {
  position: absolute;
  top: 0;
  right: 0;
}
<div id="uploadPreview-container">
  <img id="uploadPreview" />
  <div id="uploadReset"><a href="javascript:void(0)" onclick="ResetImage()" title="Reset Image Upload">RESET</a></div>
</div>
<div><input id="uploadImage" type="file" name="myPhoto" data-max-size="248" onChange="PreviewImage();" /></div>

【问题讨论】:

  • 在 SO 上发帖时,您可以点击看起来像 &lt;&gt; 的按钮并使您的代码可运行,以便我们可以看到它的作用:)

标签: javascript filereader reset preview


【解决方案1】:

你说得对,你必须使用类名而不是 id,因为你不知道要添加多少图像,所以你必须动态创建 img 元素。

  1. 添加multiple 属性,允许用户在单个文件输入中上传多个图像。
  2. 循环遍历文件并为每个文件附加图像预览。

function PreviewImage() {
  Array.from(document.getElementById("uploadImage").files).forEach(file=>{
    var oFReader = new FileReader();
    oFReader.readAsDataURL(file);
    oFReader.onload = function(oFREvent) {
      var img = new Image();
      img.src = oFREvent.target.result;
      img.className = "uploadPreview";
      document.getElementById("preview_div").appendChild(img);
      document.getElementById('uploadPreview-container').style.display = 'block';
    };
  });
};

function ResetImage() {
  document.getElementById('uploadPreview-container').style.display = 'none';
  document.getElementById('uploadImage').value = '';
};
.uploadPreview {
  width: 100px;
}

#uploadPreview-container {
  display: none;
  position: relative;
  width: 100px;
}

#uploadReset {
  position: absolute;
  top: 0;
  right: 0;
}
<div id="uploadPreview-container">
  <div id=preview_div></div>
  <div id="uploadReset"><a href="javascript:void(0)" onclick="ResetImage()" title="Reset Image Upload">RESET</a></div>
</div>
<div><input id="uploadImage" type="file" name="myPhoto" data-max-size="248" onChange="PreviewImage();" multiple /></div>

【讨论】:

  • 谢谢,这可行,但理想情况下我想使用多个单个文件上传字段而不是多个文件字段
  • @user3131345 好的,然后尝试一下。我不是免费的代码编写服务。自己尝试一下,我会帮你解决它,它不起作用。
猜你喜欢
  • 2021-04-28
  • 2017-06-30
  • 2016-12-17
  • 1970-01-01
  • 1970-01-01
  • 2014-12-04
  • 1970-01-01
  • 2015-06-07
相关资源
最近更新 更多