javascript – Jquery Onload函数停止for循环,在函数内传递循环x

我正在使用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

    }
}
上一篇:Java.io:性能调优


下一篇:java – R.raw.file的Android FileReader