角度时间验证似乎不适用于1.3?

时间:2014-10-15 00:05:00

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

我有一套简单的代码:

<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

如果我将小提琴更改为1.3版本,它会将每个时间视为无效。

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

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

1 个答案:

答案 0 :(得分:1)

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

实施例: -

<强> Demo

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

如果您确实在DOM中直接使用时间和设置值elm.valueAsDate = new Date(2014, 1, 1, 7, 34);,则元素的HTML5属性(elm.validity)将返回有效的true,因此这肯定是使用角度实现。

因此,在您的情况下,请尝试将时间设置为: -

实施例: -

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

<强> Demo