【问题标题】:Angular Time validation does not appear to be working in 1.3?角度时间验证在 1.3 中似乎不起作用?
【发布时间】:2014-10-15 00:05:00
【问题描述】:

我有一组简单的代码:

<div ng-app="myApp">

  <div ng-controller="test">
   {{time}}<br>
      <input ng-model="time" type="time" placeholder="HH:mm" min="08:00" max="17:00" required>
  </div>
</div>

可以从这里执行:http://jsfiddle.net/U3pVM/9824/ 这个 JSFiddle 使用的是 1.3.0.beta 17

如果我将 Fiddle 更改为 1.3 版本,它每次都认为是无效的。

(如果时间有效,则显示在数据输入框上方。)

对此验证有什么问题有什么想法吗?

【问题讨论】:

    标签: angularjs angularjs-ng-model angularjs-validation


    【解决方案1】:

    这可能是输入type time 验证是如何以角度实现的。因此,在您的情况下,由于您提供的日期,您的输入超过了max 限制(在解析器验证最大值期间)。即new Date(),这是当前日期。当您将 max 值指定为 17:00 时,角度会将其转换为 ISO 日期格式以进行验证(这对于验证时间来说很奇怪),即将其转换为 纪元日期,即它将变为1970-01-01T17:00:00.00000Z,它会比较时间以查看是否超过。您可以通过提供 max 作为有效的 ISO 日期时间格式来测试它。

    例子:-

    Demo

    如果您不指定任何日期部分,则输入类型 time 的 ng-model 需要Epoch 的确切日期(即1 January 1970)。它输出为日期为1/1/1970 的指定时间。

    如果你真的使用时间并直接在DOM中设置值elm.valueAsDate = new Date(2014, 1, 1, 7, 34);元素的HTML5属性(elm.validity)返回valid为true,所以这肯定是角度实现。

    所以在你的情况下尝试将时间设置为:-

    例子:-

    app.controller('MainCtrl', function($scope) {
      var dt = new Date();
      $scope.time = new Date(1970,0,1,dt.getHours(),dt.getMinutes(),dt.getSeconds());
    });
    

    Demo

    【讨论】:

    • 根据您的评论“这对于验证时间来说很奇怪”......在您看来这是一个应该报告的错误吗?
    • 例如,我正在构建一个班级调度器。输入的课程时间必须在上午 7 点到晚上 10 点之间。我没有看到一种方法可以轻松地验证时间的输入,而无需像您的演示中那样在日期中进行硬编码。似乎时间验证应该与日期分开?
    猜你喜欢
    • 2019-10-18
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 2014-01-13
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多