我尝试读取输入类型文件(多个)上传的文件。代码如下:
$(document).ready(function() {
$('#convert').on('click', function() {
var files=$('#files')[0].files;
if (!files) return;
for (var i=0; i<files.length; i++) {
var file=files[i];
fr = new FileReader();
fr.onload = (function(received) {
var note=$(fr.result);
});
fr.readAsText(file);
}
});
});
现在我的问题是:
即使在加载文件之前,也会调用“ onload”功能。 note
从来没有任何内容。但是,当我在note
-行之前放置一个断点并等待一会儿时,note
得到了内容。
如此看来,onload()-event的调用为时过早。我该怎么办?
(浏览器是Chrome)
答案 0 :(得分:1)
我将fr.result
替换为this.result
:
fr.onload = (function() {
var note=$(this.result);
});
成功了
答案 1 :(得分:0)
您正在将fr
设置为全局变量,并且在触发onload时,由于循环的原因,它将是与您期望的对象不同的对象
尝试将其包装在IIFE中以创建闭包并将fr
设置为局部变量
for (var i = 0; i < files.length; i++) {
(function(file) {
var fr = new FileReader();
fr.onload = function(received) {
var note = $(fr.result);// not sure what intent is here
};
fr.readAsText(file);
})(files[i])
}