我正在使用dataTransfer将XMLHttpRequest中的图像文件传递给此函数readfiles(文件)
我想要做的是同时在reader.onload()函数内的一行代码中预览图像和图像文件名.
并且因为将有超过1个文件传递给该函数,我将它们抛入for循环
问题是,当我尝试通过readDataURL预览图像时没关系,但文件名无法预览我认为因为reader.onload()函数停止了for循环通过图像文件循环.
这是我的代码
function readfiles(files) {
var x;
for(x = 0; x < files.length; x = x + 1) {
var reader = new FileReader();
reader.readAsDataURL(files[x]);
reader.onload = function(e) {
console.log(e.target.result);
console.log(files[x].name);
}
}
}
一直在寻找解决方案约5个小时,任何帮助!
解决方法:
ROX的答案是不对的.在他的情况下,您将看到它将输出相同的文件名4次.你需要的是一个闭包,它将在每次迭代时保持正确的上下文.您可以按如下方式实现此目的.检查小提琴http://jsfiddle.net/cy03fc8x/.
function readfiles(files) {
for(x = 0; x < files.length; x = x + 1) {
var file = files[x];
(function(file){ //this is a closure which we use to ensure each iteration has the right version of the variable 'file'
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function(e) {
console.log(e.target.result);
console.log(file.name);
}
})(file); //on each iteration, pass in the current file to the closure so that it can be used within
}
}