万无一失的不引人注目的验证

时间:2016-04-07 20:53:30

标签: jquery foolproof-validation

我想使用Foolproof验证比较两个日期字段,其中第二个字段必须大于第一个字段。但是,两者都可以为空。即使使用PassOnNull = True,当两个字段都为空时,验证也会失败。这可以使用[GreaterThanOrEqualTo]按预期工作,但我的第二个日期必须更大。

[GreaterThan("DateFrom", PassOnNull = true, ErrorMessage = "Date To must be greater than Date From")]
public DateTime? DateTo { get; set; }

在查看源代码时,当任一字段为空(但不是两者)时,它会绕过验证。这背后有什么理由吗?这对我来说并没有多大意义。我可以轻松地更改源代码,但是作为NuGet安装,我可能会被覆盖。否则,我可以手动包含它并完成。以下是源代码段:

    if (passOnNull) {

        var isNullish = function (input) {
            return input == null || input == undefined || input == "";
        };

        var value1nullish = isNullish(value1);
        var value2nullish = isNullish(value2);

        if ((value1nullish && !value2nullish) || (value2nullish && !value1nullish))
            return true;
    }

以下修改对我来说在我能想到的几乎任何场景中都更有意义,因为必需的字段仍然有自己的验证通过:

        if (value1nullish || value2nullish)
            return true;

我应该采用另一种方式来验证这一点,还是FoolProof需要修复?

1 个答案:

答案 0 :(得分:0)

您可以同时使用.change() Array.prototype.every().eq().valueAsDate属性input type="date"required属性{{1}元素

input type="date"
var dates = $("input[type=date]");

dates.change(function(e) {
  if (dates.get().every(function(el) {
        return el.valueAsDate !== null
      }) 
      && dates.eq(1)[0].valueAsDate > dates.eq(0)[0].valueAsDate) {
        alert(true)
  } else {
      alert(false)
  }
})