Javascript AngularJS中的日期验证

Javascript AngularJS中的日期验证,javascript,angularjs,angularjs-validation,Javascript,Angularjs,Angularjs Validation,我不能在angularjs内置的表单中允许将来的日期 这是我的HTML: <div ngCloak ng-app="laurelMoney" ng-controller="myCtrl"> <form name="userForm"> <div class="form-group"> <input type='date' id="trandate" class="form-control" ng-model="trandate"

我不能在angularjs内置的表单中允许将来的日期

这是我的HTML:

<div ngCloak ng-app="laurelMoney" ng-controller="myCtrl">
  <form name="userForm">
    <div class="form-group">
      <input type='date' id="trandate" class="form-control" ng-model="trandate" required ng-class="{ 'has-error' : userForm.trandate.$error }" />
      <p ng-show="userForm.trandate.$error" class="help-block">Transaction can't be in future</p>
    </div>

    <a href="#" class="btn btn-primary btn-sm btn-block" ng-click="submitForm()" type="submit">Add Transaction</a>
  </form>

交易不能在将来进行

我的javascript是

angular.module('laurelMoney', [])
  .controller('myCtrl', function($scope) {
    var today = new Date();
    var dd = today.getDate();
    var mm = today.getMonth() + 1;
    var yyyy = today.getFullYear();
    if (dd < 10) {
      dd = '0' + dd
    }
    if (mm < 10) {
      mm = '0' + mm
    }
    today = yyyy + '-' + mm + '-' + dd;
    document.getElementById("trandate").setAttribute("max", today);
    $scope.submitForm = function() {

      if ($scope.userForm.$valid) {
        alert('our form is amazing');
      } else {
        console.log("Error");
      }

    };
  });
角度模块('laurelMoney',[]) .controller('myCtrl',函数($scope){ var today=新日期(); var dd=today.getDate(); var mm=today.getMonth()+1; var yyyy=today.getFullYear(); 如果(dd<10){ dd='0'+dd } 如果(毫米<10){ 毫米='0'+毫米 } 今天=yyyy+'-'+mm+'-'+dd; document.getElementById(“trandate”).setAttribute(“max”,今天); $scope.submitForm=function(){ 如果($scope.userForm.$valid){ 警惕(“我们的形式令人惊讶”); }否则{ 控制台日志(“错误”); } }; }); 当日历弹出时,这工作正常。未来日期都被禁用。但我可以在日期输入框中手动将其更改为未来日期

该系统还允许提交未来的日期。这怎么办


谢谢。

从你的问题中我可以理解,你只是试图抛出一条错误消息或不允许用户选择未来的日期,对吗?那么,给你:

注意事项:

  • 您在plunker中的
    Angular
    版本已完全过时,因此可能无法按预期工作
  • ng斗篷
    应该是
    ng斗篷
  • 您应该在
    输入中添加name
    属性
    ,以对其进行验证
  • 此外,您可以使用提交表单,而不是单击
    ng
  • 正如注释中所指出的,如果
    表单
    无效
  • ,您可以禁用
    按钮
    ,而不是在
    控制器
    中进行此检查
  • 最后,要将日期设置为max date(在今天的示例中),只需执行以下操作:
    $scope.max=new date()
    并在视图中调用它 下面是一个完整的示例:

    (函数(){
    "严格使用",;
    有棱角的
    .module('laurelMoney',[])
    .controller('myCtrl',myCtrl');
    myCtrl.$inject=['$scope'];
    函数myCtrl($scope){
    $scope.max=新日期();
    }
    })();
    
    
    

    需要事务处理

    交易应为有效日期

    交易不能在将来进行

    添加事务
    这是一个很好的代码示例,但是您的
    ng类不是没有必要吗?非常确定当
    输入[date]
    无效时,会将
    .ng invalid.ng invalid max
    应用到该输入[date]
    中。嗯,是的,它只是OP的plunker的一个副本。啊,没错。另外,OP,您可能应该使用
    ng submit='userForm.$valid&&submitForm()'
    而不是在控制器中检查表单有效性。把所有东西都放在一个地方。此外,如果您正试图这样做,您可以通过执行
    来阻止验证消息显示,而不是将错误记录到控制台上。@DanPantry,好消息,我更正了
    ngClass
    部分,还使用了
    ng disabled
    来更改按钮的状态。