我正在尝试创建一个非常简单的网页,该网页接收输入文件并在控制台中显示内容。当我尝试使用它时,它有点有用,但总是落后一步。例如,
1)上传" 1.txt" - >控制台打印""
2)上传" 2.txt" - >控制台打印" 1.txt"
的内容3)上传" 3.txt" - >控制台打印" 2.txt"
的内容...
function readData(){
var fileholder = document.querySelector('#knotFiles');
var content = 'Empty';
var reader = new FileReader();
reader.onload = function(event){
content = event.target.result;
}
fileholder.addEventListener("input", function(event) {
var files = fileholder.files;
reader.readAsText(files[0]);
console.log(content);
}, false);
return content;
};
readData();

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="" />
<title></title>
</head>
<body>
<div id="container">
<input type="file" id="knotFiles" multiple>
</div>
<script src="knot.js">
</script>
</body>
</html>
&#13;
我是javascript和web开发的新手,所以我很抱歉这是一个简单的问题。谢谢!
答案 0 :(得分:0)
render.onload
是一个async
函数排序content = event.target.result;
将在最后执行,因此console.log(content);
放在render.onload
内,以便content
中的最新更改数据
function readData(){
var fileholder = document.querySelector('#knotFiles');
var content = 'Empty';
var reader = new FileReader();
reader.onload = function(event){
content = event.target.result;
console.log(content);
}
fileholder.addEventListener("input", function(event) {
var files = fileholder.files;
reader.readAsText(files[0]);
}, false);
return content;
};
readData();
答案 1 :(得分:0)
FileReader()
异步加载 - 您输出的是之前的结果,因为变量content
在事件侦听器回调触发之前尚未更新。像这样改写:
var fileholder = document.querySelector('#knotFiles');
fileholder.addEventListener("input", function(event) {
readData();
}, false);
function readData(){
var content = '';
var files = fileholder.files;
var reader = new FileReader();
reader.readAsText(files[0], "UTF-8"); // assumed this encoding
reader.onload = function(event){
content = event.target.result;
console.log(content);
return content;
};
}