【问题标题】:Foolproof Unobtrusive Validation万无一失的不引人注目的验证
【发布时间】:2016-04-07 20:53:29
【问题描述】:

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

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

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

    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 只需要修复?

【问题讨论】:

    标签: jquery foolproof-validation


    【解决方案1】:

    您可以在两个input type="date" 元素中使用.change() 事件、Array.prototype.every().eq().valueAsDate 属性的input type="date"required 属性

    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)
      }
    })
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
    </script>
    <form>
      <input type="date" name="date1" required />
      <input type="date" name="date2" required />
      <input type="submit" />
    </form>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-25
      • 1970-01-01
      相关资源
      最近更新 更多