简体   繁体   English

jQuery图像预览,可上传多个图像

[英]jQuery image preview for multiple image upload

I am using this code in my image uploader: 我在图片上传器中使用以下代码:

Html: HTML:

<input type="file" id="files" name="files[]" multiple />
<ul id="list"></ul>

JS: JS:

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

for (var i = 0, f; f = files[i]; i++) {

  if (!f.type.match('image.*')) {
    continue;
  }

  var reader = new FileReader();

  reader.onload = (function(theFile) {
    return function(e) {
      var li = document.createElement('li');
      li.innerHTML = ['<img class="thumb" src="', e.target.result,
                        '" title="', escape(theFile.name), '"/><input type="text" class="rename" name="',i,'" value="',escape(theFile.name),'"><input type="text" class="reorder" name="',i,'" value="',i,'">'].join('');
      document.getElementById('list').insertBefore(li, null);
    };
  })(f);

  reader.readAsDataURL(f);
}
}
document.getElementById('files').addEventListener('change', handleFileSelect, false);

My problem is when it gets to reader.onload, the for loop is done so i = #of images not image # like I want it to be. 我的问题是,当它到达reader.onload时,就完成了for循环,所以我= #of图像而不是图像#如我所愿。 Is there any way to fix this so the name of my inputs is the image # of the image they're next to? 有什么办法可以解决这个问题,所以我输入的名称是它们旁边的图像的图像编号?

reader.onload runs as many times as there are pictures being uploaded. reader.onload运行的次数与上传图片的次数相同。

var x = 0;
  reader.onload = (function(theFile) {
    return function(e) {

      console.log(x);

      x++;

    };
  })(f);

You already have a solution for f . 您已经有了f的解决方案。 You could just do exactly the same thing for i : pass it to the handler's closure: 您可以为i做完全相同的事情:将其传递给处理程序的闭包:

  reader.onload = (function(theFile, i) {
    return function(e) {
      var li = document.createElement('li');
      li.innerHTML = ['<img class="thumb" src="', e.target.result,
                        '" title="', escape(theFile.name), '"/><input type="text" class="rename" name="',i,'" value="',escape(theFile.name),'"><input type="text" class="reorder" name="',i,'" value="',i,'">'].join('');
      document.getElementById('list').insertBefore(li, null);
    };
  })(f, i);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM