我有一个正在使用的文件扩展名检查器,但我无法弄清为什么它不起作用。我测试了显示布尔值const orderRanks = {
unique: 2,
rare: 4,
legendary: 42,
mythic: 420
};
const items = /*your items array*/;
items.sort((lhsItem, rhsItem) => {
const lhs = lhsItem.tier.toLowerCase();
const rhs = rhsItem.tier.toLowerCase();
return orderRanks[lhs] - orderRanks[rhs];
/*
== -> 0
lhs < rhs -> negative
lhs > rhs -> positive
this works because it is simple numbers (not NaN nor limits)
*/
});
来确定两个值是否相等。相反,它继续说我正在上传的文件不等于if语句中列出的文件类型,即使两个值完全相同。任何帮助将不胜感激
equal
索引如下
document.addEventListener('DOMContentLoaded', function() {
document.querySelector('input[id="fileInput"]').onchange=validateSize;
})
function validateSize(event) {
var filesLength = event.target.files.length;
var filesSize = [];
var result = "";
var equal = null;
document.getElementById("fileBigAlert").innerHTML = "";
document.getElementById("fileExtAlert").innerHTML = "";
if (filesLength >= 10) {
document.getElementById("submitButton").disabled = true;
} else {
document.getElementById("submitButton").disabled = false;
}
for (i = 0; i < filesLength; i++) {
if (event.target.files[i].size > 2097152) {
document.getElementById("submitButton").disabled = true;
document.getElementById("fileBigAlert").innerHTML = '<div class="alert alert-warning" role="alert">'
+ event.target.files[i].name + ' is larger than 2MB</div>';
} else {
filesSize.push(event.target.files[i].size);
}
if (String(event.target.files[i].type) !== "image/png" || "image/jpeg" || "image/gif") {
equal = false;
//document.getElementById("submitButton").disabled = true;
//document.getElementById("fileExtAlert").innerHTML = '<div class="alert alert-warning" role="alert">'
// + event.target.files[i].name + ' Extension not allowed please choose a JPEG, JPG, GIF, or PNG file.</div>';
} else {
equal = true;
//filesSize.push(event.target.files[i].size);
}
}
console.log(event.target.files[0].type);
console.log(equal);
filesSize.forEach(function(item, index, array){
result += index + ": " + item + "<br/>";
});
document.getElementById("fileValidate").innerHTML = result;
}
答案 0 :(得分:0)
比较多个值的方式不正确。您有(string)!==(string)或(string)或(string),如果为true,则始终等于(string)!==(string)的布尔值;如果等于,则后面的(string)为(||)。但是,后面的字符串值"image/jpeg"
将始终等于真正的布尔值。本质上,您仅匹配第一个条目("image/png"
)。如果文件不是png类型,则if语句将始终返回true,而equal
将始终为false。
您如何比较:
var ftMustMatch = ["image/png", "image/jpeg", "image/gif"];
if( ftMustMatch.indexOf(String(event.target.files[i].type).toLowerCase()) < 0 ) {
equal = false;
}
这可以理解为“如果文件的小写字符串值类型与数组的任何值都不匹配(结果将小于零),则将其设置为false。”
ftMustMatch
表示文件类型必须匹配。
为什么toLowerCase
?万一该值用不同的大小写形式输入,它仍将与您定义的值数组中的小写值匹配。