&引用;更改“;事件落后于javascript一步
我正在尝试制作一个非常简单的网页,它接受一个输入文件并在控制台中显示内容。当我尝试使用它时,它有点工作,但总是落后一步。比如说, 1) 上载“1.txt”->控制台打印 2) 上传“2.txt”->控制台打印“1.txt”的内容 3) 上传“3.txt”->控制台打印“2.txt”的内容&引用;更改“;事件落后于javascript一步,javascript,addeventlistener,Javascript,Addeventlistener,我正在尝试制作一个非常简单的网页,它接受一个输入文件并在控制台中显示内容。当我尝试使用它时,它有点工作,但总是落后一步。比如说, 1) 上载“1.txt”->控制台打印 2) 上传“2.txt”->控制台打印“1.txt”的内容 3) 上传“3.txt”->控制台打印“2.txt”的内容 函数readData(){ var fileholder=document.querySelector(“#knotFiles”); 变量内容='空'; var reader=new FileReader(
函数readData(){
var fileholder=document.querySelector(“#knotFiles”);
变量内容='空';
var reader=new FileReader();
reader.onload=函数(事件){
内容=event.target.result;
}
fileholder.addEventListener(“输入”,函数(事件){
var files=fileholder.files;
reader.readAsText(文件[0]);
控制台日志(内容);
},假);
返回内容;
};
readData()代码>
render.onload
是排序content=event.target.result中的一个async
函数
将在最后执行,因此putconsole.log(content)代码>内部render.onload
查看内容中的最新更改
数据
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();
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;
};
}
移动console.log(内容)
intoreader.onload
函数,因为当读取操作成功完成时,将触发此事件。当我执行此操作时,它显示在我首次上载文件时不会调用“onload”;只有当我上传第二个不同名称的文件时。谢谢你,你知道有什么资源可以防止我将来犯类似的错误吗?你的大脑和stackoverflow;)也许还有像……这样的网站。。。。