1

我有一组简单的代码:

<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 版本,它每次都认为是无效的。

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

关于此验证有什么问题的任何想法?

4

1 回答 1

1

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

例子:-

演示

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

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

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

例子:-

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

演示

于 2014-10-15T13:37:32.620 回答