javascript - JavaScript FileReader 正在复制 onload 回调
问题描述
以下代码让我发疯。它在文件上传输入发生更改时拾取,然后通过 FileReader 抓取图像。烦人的事情是,我不知道为什么,那就是不断地重复 onload 事件。所以我第一次选择一个文件时它会触发一次 onload,如果我选择第二个具有相同文件输入的文件,onload 会触发两次,如果我再次选择一个文件,它会触发 3 次,以此类推。
var ele = document.getElementById('photo-upload');
ele.addEventListener('change',function(e){
console.log("FLE CHANGED");
var file = e.target.files[0];
var fr = new FileReader();
fr.onload = function(e){
console.log("FILE READER LOADED");
}
}
解决方案
每次单击时,您都在创建新的文件阅读器<input type="file" id="photo-upload" />
。
我修改了你的代码:
const ele = document.getElementById('photo-upload');
const fr = new FileReader();
fr.onload = function(e){
console.log("FILE READER LOADED");
}
ele.addEventListener('change',function(e){
console.log("FLE CHANGED");
const file = e.target.files[0];
// load file with using on of fr methods
// eg.
fr.readAsArrayBuffer(file);
}
工作示例:
const ele = document.getElementById('photo-upload');
const fr = new FileReader();
fr.onload = evt => {
console.log(evt.target);
console.log("FILE READER LOADED");
}
ele.addEventListener('change', evt => {
console.log("FLE CHANGED");
const file = evt.target.files[0];
fr.readAsArrayBuffer(file);
})
<input type="file" id="photo-upload" />
推荐阅读
- mongodb - Mongorestore 不起作用(无效的 BSON 大小错误)
- rust - mio 什么时候做 epoll 实例?
- javascript - 发送表单时更改按钮/图标
- wordpress - 根据类别在 3 个不同的主页位置显示一种自定义帖子类型
- node.js - CastError:模型“Product”的路径“_id”处的值“XXX”转换为 ObjectId 失败
- azure - Azure ARM:deploymentScripts 和第一方应用程序标识错误
- swift - SwiftUI - 是否可以在显示后更改 ActionSheet 按钮文本?
- sql - 带有 ODBC SQL 查询的 Julia ReadOnlyMemoryError
- python - 从抓取结果python中删除html元素
- python - 如何提取具有非 ASCII 字符名称的电报组成员?