我在我的图片上传器中使用此代码:
HTML:
<input type="file" id="files" name="files[]" multiple />
<ul id="list"></ul>
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);
我的问题是当它到达reader.onload时,for循环完成所以i = #of images not image#就像我想要的那样。有没有办法解决这个问题,所以输入的名称是他们旁边的图像的图像#?
答案 0 :(得分:1)
reader.onload运行的次数与上传的图片数量相同。
var x = 0;
reader.onload = (function(theFile) {
return function(e) {
console.log(x);
x++;
};
})(f);
答案 1 :(得分:1)
您已经有f
的解决方案。您可以为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);