下面的代码基本上遍历已删除的文件,将文件对象推送到filesArray中,如果它们满足条件(小于1mb并且是png / jpg / fig),则将文件附加到DOM 。我已将允许的fileSize设置为1MB。
for (var i = 0, f; f = files[i]; i++) {
if (validateType(files[i].type)){
//alert("ok");
if (files[i].size < allowedSize){
filesArray[i]=files[i];
var reader = new FileReader();
a = 0;
reader.onload = function (event) {
var image = new Image();
image.src = event.target.result;
//image.width = 100; // a fake resize
imageBoxWrapper = $("<span />", {id: "idw"+a,class: "imageBoxWrapper"});
imageBox = $("<span />", {id: "idb"+a,class: "imageBox"});
complete = imageBox.append(image);
$(complete).appendTo(imageBoxWrapper);
newimageBox = $(imageBoxWrapper).append("<span class='imageDelete' imageIndex="+a+"><img src='images/icons/cross.png'> Delete</span>");
$(newimageBox).appendTo("#dropZone");
a++;
};
reader.readAsDataURL(files[i]);
} //end size validation
else{
oversize = true;
overzsizefiles += files[i].name+" is bigger than 1Mb \n";
}
} // end type validation
else{
found = true;
unAllowedFiles += files[i].name+" is not allowed \n";;
}
}
当我删除大于1 MB的文件时,它们不会附加到DOM,但是当我在console.log(filesArray)时,长度适用于所有文件。 E.g
a.png > 1 MB
b.png > 512KB
c.png > 256KB
Alert will be thrown for a.png that it is oversize,
b.png and c.png will be appended to DOM,
console.log(fileArray) outputs [1: file, 2; file]
console.log(fileArray) output 3
由于filesArray[i]=files[i]
在if if (files[i].size < allowedSize)
中声明,我原本期望数组长度为2
答案 0 :(得分:1)
您正在执行filesArray[i]=files[i];
因此,如果最后一项通过了尺寸测试,则filesArray
将被设置为全长,即使未分配其中的某些项目。 Javascript .length
报告的数据高于指定的最高数组元素。
在这个简单的测试中,您可以看到发生了什么:
var x = [];
x[10] = "foo";
alert(x.length); // alerts 11
要修复它,您可能想要更改:
filesArray[i]=files[i];
到此:
filesArray.push(files[i]);
然后,filesArray
只会包含通过尺寸测试的项目,其长度将与其中的项目数量相匹配。