FileReader onload with result和parameter [英] FileReader onload with result and parameter

查看:195
本文介绍了FileReader onload with result和parameter的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法同时获得文件阅读器的结果和onload函数中的一些参数。这是我的代码:

I can't manage to get both the result of the filereader and some parameters in a onload function. This is my code:

控制HTML:

<input type="file" id="files_input" multiple/>

Javascript函数:

Javascript function:

function openFiles(evt){
    var files = evt.target.files;
    for (var i = 0; i < files.length; i++) {
      var file=files[i];
      reader = new FileReader();
      reader.onload = function(){
          var data = $.csv.toArrays(this.result,{separator:'\t'});
      };
      reader.readAsText(file);
    }
  }

添加活动:

 files_input.addEventListener("change", openFiles, false);

我使用 filereader.result onload 函数。如果我为这个函数使用参数,比如file,我就不能再访问结果了。例如,我想在onload函数中使用 file.name 。如何解决这个问题?

I use the filereader.result, in the onload function. If I use a parameter, like file, for this function, I can't not access to the result anymore. For example I'd like to use file.name in the onload function. How to resolve this issue ?

推荐答案

尝试将onload函数包装在另一个函数中。在这里,闭包允许您通过变量 f 来访问正在处理的每个文件:

Try wrapping your onload function in another function. Here the closure gives you access to each file being processed in turn via the variable f:

function openFiles(evt){
    var files = evt.target.files;

    for (var i = 0, len = files.length; i < len; i++) {
        var file = files[i];

        var reader = new FileReader();

        reader.onload = (function(f) {
            return function(e) {
                // Here you can use `e.target.result` or `this.result`
                // and `f.name`.
            };
        })(file);

        reader.readAsText(file);
    }
}

有关为什么需要关闭的讨论,请参阅这些相关问题:

For a discussion of why a closure is required here see these related questions:

  • JavaScript closure inside loops – simple practical example
  • Javascript infamous Loop issue?

这篇关于FileReader onload with result和parameter的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆