问题是我上传了无效的文件扩展名和无效的文件大小。它没有警告无效的文件类型和文件大小,而是根据满足2条件的第一个文件的警报。
例如,当我上传example.php
和另一个大于2048的文件时,它会提醒无效的文件类型。反之亦然。
我想要的是如果我上传example.php
而另一个文件大于2048,则输出必须是无效的文件类型和文件大小。
这是我的代码:
var fileextension = new RegExp("(.*?)\.(csv|doc|docx|gif|jpeg|jpg|pdf|png|ppt|pptx|txt|xls|xlxs|zip|mp3|mp4)$");
$('input[type=file]').change(function () {
var val = $(this).val().toLowerCase();
for(var i=0; i<this.files.length; i++){
var filename = this.files[i].name.toLowerCase();
var fsize = this.files[i].size,
fsize = fsize / 1024; // 1024 = 1mb
if(fsize > 2048){
$(this).val('');
swal('Opps','Invalid file size','warning');
}else if(!fileextension.test(filename)){
$(this).val('');
swal('Opps','Invalid file type','warning');
}else if(!fileextension.test(filename) && fsize > 2048){
$(this).val('');
swal('Opps','Invalid file type and file size','warning');
}
}
答案 0 :(得分:1)
创建一个临时字符串,例如message
,并按照以下方式更改if
块:
var message = "";
if(fsize > 2048){
message += "Invalid file size";
}
if(!fileextension.test(filename)) {
message += message === "" ? "Invalid" : " and";
message += " file type";
}
然后你可以这样打电话给swal
:
if (message) { // Checks if there is something in `message`
$(this).val('');
swal('Opps',message,'warning');
}
修改强> 这是更新的答案(在小提琴中提到):
var fileextension = new RegExp("(.*?)\.(csv|doc|docx|gif|jpeg|jpg|pdf|png|ppt|pptx|txt|xls|xlxs|zip|mp3|mp4)$");
$('input[type=file]').change(function() {
var val = $(this).val().toLowerCase(),
invalidType = false,
invalidSize = false;
for (var i = 0; i < this.files.length; i++) {
var filename = this.files[i].name.toLowerCase();
var fsize = this.files[i].size,
fsize = fsize / 1024; // 1024 = 1mb
if (fsize > 2048) {
invalidSize = true;
}
if (!fileextension.test(filename)) {
invalidType = true;
}
}
var message = "";
if (invalidType) {
message += "Invalid type";
}
if (invalidSize) {
message += (message === "" ? "" : " and") + " size";
}
if (message) {
swal('Opps', message, 'warning');
}
});
答案 1 :(得分:0)
发生的情况是,执行评估为if
的第一个true
条件,并且程序不评估其余条件。在您的情况下,这会使if else
循环中的最后一个条件无法访问。如果您希望首先评估您的最后一个条件,那么将其向上移动 - 如下所示:
var fileextension = new RegExp("(.*?)\.(csv|doc|docx|gif|jpeg|jpg|pdf|png|ppt|pptx|txt|xls|xlxs|zip|mp3|mp4)$");
$('input[type=file]').change(function () {
var val = $(this).val().toLowerCase();
for(var i=0; i<this.files.length; i++){
var filename = this.files[i].name.toLowerCase();
var fsize = this.files[i].size,
fsize = fsize / 1024; // 1024 = 1mb
if(!fileextension.test(filename) && fsize > 2048){
$(this).val('');
swal('Opps','Invalid file type and file size','warning');
}
else if(fsize > 2048){
$(this).val('');
swal('Opps','Invalid file size','warning');
}
else if(!fileextension.test(filename)){
$(this).val('');
swal('Opps','Invalid file type','warning');
}
}
编辑 - 如果您希望输出基于所有文件的状态而不是单个文件,那么显然您无法在循环内处理输出。你需要做这样的事情:
var fileextension = new RegExp("(.*?)\.(csv|doc|docx|gif|jpeg|jpg|pdf|png|ppt|pptx|txt|xls|xlxs|zip|mp3|mp4)$");
$('input[type=file]').change(function () {
var val = $(this).val().toLowerCase();
var sizeError=false;
var extensionError=false;
for(var i=0; i<this.files.length; i++){
var filename = this.files[i].name.toLowerCase();
var fsize = this.files[i].size,
fsize = fsize / 1024; // 1024 = 1mb
if(fsize > 2048){
sizeError=true;
}
if(!fileextension.test(filename)){
extensionError=true;
}
}
现在在extensionError
循环之外使用这些布尔值sizeError
和for
来检查和处理输出。