【问题标题】:Jquery Validate gives error if file not uploaded [duplicate]如果文件未上传,Jquery Validate 会出错 [重复]
【发布时间】:2020-03-19 13:14:45
【问题描述】:

我正在为我的表单使用 jQuery Validate。所有验证规则都运行良好,但文件验证存在一些问题。

我有 3 个文件输入,其中 2 个是必需的,1 个不是。如果我上传所有 3 个文件,则规则可以正常工作。但是,如果我没有在第三个输入(nic)中上传文件,那么它会给我一个文件大小错误并且没有验证运行。

$(document).ready(function() {
  $.validator.addMethod('filesize', function(value, element, arg) {
      if (element.files[0].size <= arg) {
        return true;
      } else {
        return false;
      }
    }

    $("#Cnd_reg_form").validate({
      rules: {
        passport: {
          required: true,
          extension: "docx|jpeg|png|doc|pdf",
          filesize: 4000000
        },
        license: {
          required: true,
          extension: "docx|jpeg|png|doc|pdf",
          filesize: 2000000
        },
        nic: {
          required: false,
          extension: "docx|jpeg|png|doc|pdf",
          filesize: 2000000
        }
      },
      messages: {
        passport: {
          required: "Please upload your passport",
          extension: "Please upload file with extension doc,pdf,jpeg,png",
          filesize: "Please select file under 4MB"
        },
        license: {
          required: "Please upload your license",
          extension: "Please upload file with extension doc,pdf,jpeg,png",
          filesize: "Please select file under 2MB"
        },
        nic: {
          extension: "Please upload file with extension doc,pdf,jpeg,png",
          filesize: "Please select file under 2MB"
        }
      },
      errorPlacement: function(error, element) {
        error.appendTo(element.parent());
      }
    });
  })
});

【问题讨论】:

  • addMethod() 调用缺少结束 ),尽管我认为这只是问题中的一个错字,因为代码在这种状态下根本不起作用。
  • 检查“文件大小”验证是否被触发,我怀疑它是否被触发。在 addMethod() 中进行空检查。文件不会得到 element.files[0] 代码。因此可能返回 false。

标签: jquery jquery-validate


【解决方案1】:

问题是因为文件大小检查始终运行,无论该字段是否为必填项。因此,如果该字段中未提供任何文件,则验证将拒绝提交。

要解决这个问题,只需在检查大小之前检查文件是否是可选的:

$.validator.addMethod('filesize', function(value, element, arg) {
  if (this.optional(element))
    return;

  if (element.files[0].size <= arg) {
    return true;
  } else {
    return false;
  }
});

这可以进一步简化为:

$.validator.addMethod('filesize', function(value, element, arg) {
  return this.optional(element) || element.files[0].size <= arg;
});

【讨论】:

  • 您好,感谢您的帮助,如果文件未在第三输入 (nic) 中上传,请告诉我如何避免扩展检查
  • 该验证器已配置为使用可选输入。如果您检查source file on line 686,您可以看到它还执行this.optional() 检查
  • 另请注意,extension 规则现已被 accept 取代
  • 是的,你是对的。这对我有用。感谢您的帮助
猜你喜欢
  • 2017-06-18
  • 1970-01-01
  • 2014-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-31
  • 1970-01-01
相关资源
最近更新 更多