javascript - 使用 Javascript 选择多个图像但将数据存储在不同的位置

标签 javascript html image image-uploading

因此,我使用以下代码供用户上传照片(如您所见,我不允许用户一次选择多个文件,他们必须选择一个文件,打开它,然后选择下一个文件,打开它等等)。

HTML:

<input type="file" capture="camera" accept="image/*" id="files1" name="files[]">
<output id="list"></output>

<form action="post.php">
<input type='hidden' id='imgsrc1' name='imgsrc1'>
<input type='hidden' id='filepath1' name='filepath1'>

<input type='hidden' id='imgsrc2' name='imgsrc2'>
<input type='hidden' id='filepath2' name='filepath2'>

<input type='hidden' id='imgsrc3' name='imgsrc3'>
<input type='hidden' id='filepath3' name='filepath3'>

<input type="submit" name="submit" value"Submit Listing">
</form>

JavaScript

function handleFileSelect(evt) {
var files = evt.target.files; // FileList object

// Loop through the FileList and render image files as thumbnails.
for (var i = 0, f; f = files[i]; i++) {

  // Only process image files.
  if (!f.type.match('image.*')) {
    continue;
  }

  var reader = new FileReader();

  // Closure to capture the file information.
  reader.onload = (function(theFile) {
    return function(e) {
      // Render thumbnail.
      var span = document.createElement('span');
      imgsrc = e.target.result;
      filename = theFile.name;
      filepath = "images/uploads/" + theFile.name;
      span.innerHTML = ['<img class="thumb" src="', imgsrc,
                        '" title="', filepath, '"/>'].join('');
      document.getElementById('list').insertBefore(span, null);
      document.getElementById('filepath1').value=filepath;
      document.getElementById('imgsrc1').value=imgsrc;

    };
  })(f);

  // Read in the image file as a data URL.
  reader.readAsDataURL(f);

 }
}

document.getElementById('files1').addEventListener('change', handleFileSelect, false);

用户选择第一张图像,JavaScript 然后通过将其添加到 <output id="list"></output> 中来显示照片

下面的行(取自上面的代码)将所选图像的路径存储到输入框“filepath1”中,并将 Base64 图像数据存储到输入框“imgsrc1”中:

JavaScript:

  document.getElementById('filepath1').value=filepath;
  document.getElementById('imgsrc1').value=imgsrc;

HTML:

 <input type='hidden' id='imgsrc1' name='imgsrc1'>
 <input type='hidden' id='filepath1' name='filepath1'>

问题是,我希望用户能够一张一张地选择 3 张图像。当用户选择第一个图像时,一切都很好,但是当他们选择第二个图像时,它将再次运行该 JavaScript 函数,并覆盖/添加到隐藏输入框中存储的任何内容。

当用户选择第二个图像时,我希望将数据存储在两个不同的隐藏输入框中,例如:

<input type='hidden' id='imgsrc2' name='imgsrc2'>
<input type='hidden' id='filepath2' name='filepath2'>

我不知道该怎么做。可能有一个非常简单的方法可以通过使用计数器或其他东西来做到这一点,但现在是晚上 11:18,我明天早上 8 点让客户来,这是我需要为他们解决的最后一点,哈哈。任何帮助将不胜感激。

最佳答案

添加一个计数器,并在每次添加图像时简单地增加它:

var imgNum = 0;

function handleFileSelect(evt) {

if (imgNum > 3) return;
var files = evt.target.files; // FileList object

// Loop through the FileList and render image files as thumbnails.
for (var i = 0, f; f = files[i]; i++) {

  // Only process image files.
  if (!f.type.match('image.*')) {
    continue;
  }

  var reader = new FileReader();

  // Closure to capture the file information.
  reader.onload = (function(theFile) {
    return function(e) {
      // Render thumbnail.
      var span = document.createElement('span');
      imgsrc = e.target.result;
      filename = theFile.name;
      filepath = "images/uploads/" + theFile.name;
      span.innerHTML = ['<img class="thumb" src="', imgsrc,
                        '" title="', filepath, '"/>'].join('');
      document.getElementById('list').insertBefore(span, null);
      document.getElementById('filepath'+imgNum).value=filepath;
      document.getElementById('imgsrc'+imgNum).value=imgsrc;

    };
  })(f);

  // Read in the image file as a data URL.
  reader.readAsDataURL(f);

 }
  imgNum++;
}

document.getElementById('files1').addEventListener('change', handleFileSelect, false);

关于javascript - 使用 Javascript 选择多个图像但将数据存储在不同的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34213403/

相关文章:

javascript - 为什么需要先显示图片才能让 jquery 图像放大镜工作?

Javascript - window.open() 弹出窗口大小问题

css - 将图像排列在网格中

android - 奇怪的 ListView 滚动问题

javascript - 基于javascript数组数据显示行和列

javascript - Ionic 2 无法查看 ionic 项目内部的跨度,如何呈现简单文本

javascript - 仅针对启用 JavaScript 的客户端显示(即反 NOSCRIPT)

javascript - 导入函数中的未定义值

html - Div 布局未获得与预期相同的结果

css - 如何为通过 Razor 添加的每个图像添加文本叠加?