Jquery条件不起作用

时间:2016-12-05 07:27:19

标签: javascript jquery

问题是我上传了无效的文件扩展名和无效的文件大小。它没有警告无效的文件类型和文件大小,而是根据满足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');
        }
}

2 个答案:

答案 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循环之外使用这些布尔值sizeErrorfor来检查和处理输出。