我无法同时获取文件读取器的结果和onload函数中的一些参数。这是我的代码:
控件的HTML:
<input type="file" id="files_input" multiple/>
JavaScript函数:
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)来实现此功能,则无法再访问结果。例如,我想file.name
在onload函数中使用。如何解决这个问题?
尝试将onload函数包装在另一个函数中。在这里,闭包使您可以通过变量依次访问正在处理的每个文件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);
}
}
有关为什么需要关闭的讨论,请参见以下相关问题:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句