在javascript中读取文件速度过快?
我有以下代码:在javascript中读取文件速度过快?,javascript,Javascript,我有以下代码: oFReader = new FileReader(), rFilter = /^(?:image\/bmp|image\/cis\-cod|image\/gif|image\/ief|image\/jpeg|image\/jpeg|image\/jpeg|image\/pipeg|image\/png|image\/svg\+xml|image\/tiff|image\/x\-cmu\-raster|image\/x\-cmx|image\/x\-icon|image\/x\-
oFReader = new FileReader(), rFilter = /^(?:image\/bmp|image\/cis\-cod|image\/gif|image\/ief|image\/jpeg|image\/jpeg|image\/jpeg|image\/pipeg|image\/png|image\/svg\+xml|image\/tiff|image\/x\-cmu\-raster|image\/x\-cmx|image\/x\-icon|image\/x\-portable\-anymap|image\/x\-portable\-bitmap|image\/x\-portable\-graymap|image\/x\-portable\-pixmap|image\/x\-rgb|image\/x\-xbitmap|image\/x\-xpixmap|image\/x\-xwindowdump)$/i;
oFReader.onload = function (oFREvent) {
$("#preview").append("<img src='" + oFREvent.target.result + "' />");
};
function loadImageFile() {
if (document.getElementById("uploadImage").files.length === 0) { return; }
$.each(document.getElementById("uploadImage").files, function (index, value) {
if (!rFilter.test(value.type)) { alert("You must select a valid image file!"); return; }
oFReader.readAsDataURL(value);
});
}
oFReader=newfilereader(),rFilter=/^(3)以下::::::图像\/bmp(医学院校)图像\/bmp(医学院校)图像\/bmp(医学院校)图像\/以下以下以下::::::::::::::::::图像\/bmp图像\/bmp(医学院校)图像\/医学院校图像\/医学院校图像\/中美中美中美两国的图像\/中学中学中学中学化学化学化学化学化学化学化学化学化学化学化学化学中学中学中学中学中学学生学生学生学生的图像图像\/图像\/图像\/图像\/图像\/图像\/医学医学医学院校学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生图像\/图像\/图像\/图像\/中学中学中学中学中学中学中学化学化学化学化学化学化学化学化学化学化学化学化学化学化学中学中学中学中学中学中学中学中学中学中学中学化学化学化学化学化学化学化学化学化学化学化学化学化学化学化学化学化学化学化学化学化学化学化学化学x \-rgb |图像\/x \-xbitmap |图像\/x \-xpixmap|图像\/x \-xwindowdump)$/i;
oFReader.onload=函数(OFRENT){
$(“#预览”)。追加(“”);
};
函数loadImageFile(){
if(document.getElementById(“uploadImage”).files.length==0){return;}
$.each(document.getElementById(“uploadImage”)。文件、函数(索引、值){
如果(!rFilter.test(value.type)){alert(“必须选择有效的图像文件!”);return;}
readAsDataURL(值);
});
}
它的目的是获取一组拖到文件类型输入上的图像,然后在div中预览这些图像。我的问题是,当我运行此操作时,只会显示最后一个图像。如果我在javascript中添加断点并逐步执行代码,两个图像都会显示
我假设发生这种情况是因为reader.onload的
被快速调用了两次。我曾考虑在循环中使用setTimeout或可能声明的reader
,以避免冲突,但我想知道是否有更优雅的解决方案?每个f都需要一个单独的FileReader对象你正在读书
.readDataAsURL()
是一种异步方法。调用它后,它会在一段时间后完成。在.each()
循环中,您试图在前一个文件完成之前读取一个新文件,从而在它完成之前停止它
你可以这样做:
function loadImageFile() {
if (document.getElementById("uploadImage").files.length === 0) { return; }
$.each(document.getElementById("uploadImage").files, function (index, value) {
var oFReader = new FileReader(), rFilter = /^(?:image\/bmp|image\/cis\-cod|image\/gif|image\/ief|image\/jpeg|image\/jpeg|image\/jpeg|image\/pipeg|image\/png|image\/svg\+xml|image\/tiff|image\/x\-cmu\-raster|image\/x\-cmx|image\/x\-icon|image\/x\-portable\-anymap|image\/x\-portable\-bitmap|image\/x\-portable\-graymap|image\/x\-portable\-pixmap|image\/x\-rgb|image\/x\-xbitmap|image\/x\-xpixmap|image\/x\-xwindowdump)$/i;
if (!rFilter.test(value.type)) { alert("You must select a valid image file!"); return; }
oFReader.onload = function (oFREvent) {
$("#preview").append("<img src='" + oFREvent.target.result + "' />");
};
oFReader.readAsDataURL(value);
});
}
函数loadImageFile(){
if(document.getElementById(“uploadImage”).files.length==0){return;}
$.each(document.getElementById(“uploadImage”)。文件、函数(索引、值){
Reader的变量=new FileReader(),rFilter=/^(3)以下::::::图像\/bmp(医学院校)图像\/bmp(医学院校)图像\/bmp(医学院校)图像\/以下以下以下::::::::::::::::::图像\/bmp图像\/bmp(医学院校)图像\/医学院校图像\/医学院校图像\/中美中美中美两国的图像\/中学中学中学中学化学化学化学化学化学化学化学化学化学化学化学化学中学中学中学中学中学学生学生学生学生的图像图像\/图像\/图像\/图像\/图像\/图像\/医学医学医学院校学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生学生图像\/图像\/图像\/图像\/中学中学中学中学中学中学中学化学化学化学化学化学化学化学化学化学化学化学化学化学化学中学中学中学中学中学中学中学中学中学中学中学化学化学化学化学化学化学化学化学化学化学化学化学化学化学化学化学化学化学化学化学化学化学化学化学x \-rgb |图像\/x \-xbitmap |图像\/x \-xpixmap|图像\/x \-xwindowdump)$/i;
如果(!rFilter.test(value.type)){alert(“必须选择有效的图像文件!”);return;}
oFReader.onload=函数(OFRENT){
$(“#预览”)。追加(“”);
};
readAsDataURL(值);
});
}