2016-12-05 132 views
0

问题是当我上传一个无效的文件扩展名和无效的文件大小。它不会提示无效的文件类型和文件大小,而是会根据满足2条件的第一个文件发出警报。Jquery条件不起作用

例如,当我上传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'); 
     } 
} 

回答

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'); 
    } 

}); 
+0

我试过你代码我上传了一个PHP文件和一个大于2048的文件,但它仍然没有显示正确的错误,这里是我的代码https://jsfiddle.net/ga9ht53e/6/ – erinr

+0

嗯,不能真正弄清楚,但试图打开你给的链接,它对我来说是完美的。你能再次检查吗? – 31piy

+0

当你上传至少1个有效的文件扩展名时,它的工作完美,而另一个文件是假设文件大小大于2048,那么它将提醒该无效文件大小。反之亦然。但如果我上传无效的文件扩展名如.php文件和大于2048大小的有效文件,它将不会提示“无效的文件类型和文件大小” – erinr

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; 
     } 
} 

现在使用这些布尔值extensionErrorsizeErrorfor循环外检查和处理的输出。

+0

我已经尝试过了,输出无效的文件大小。第一个传递给我的数组的值大于2048,第二个传递给我的数组的值是无效的文件类型。 – erinr

+0

我试图编辑一个,但它没有得到错误。这里是代码https://jsfiddle.net/y3q29ocp/5/现在,我现在当我试图上传上传一个单一的它不验证不像这里在我的其他代码jsfiddle.net/ga9ht53e/6 – erinr