手动选择输入日期到最大值返回未定义

Posted

技术标签:

【中文标题】手动选择输入日期到最大值返回未定义【英文标题】:Manual selection input date to max returns undefined 【发布时间】:2019-03-30 02:24:59 【问题描述】:

我有两个设置了最大值和最小值的日期选择器。如果将 From date max 设置为特定日期并且我手动选择该日期,它将返回无效日期。选择任何其他日期会返回正确的值。(例如,如果最大设置是 10 月 24 日并且我手动选择它,那么它会返回未定义)

 <div class="col-sm-2">
  <h6>From Date</h6>
    <input type="date" onkeydown="return false" id="fromDate" class="form-control" ng-change="fdateSel()" max="fmaxdate" ng-model="fromDate">    
 </div>
 <div class="col-sm-2">
   <h6>To Date</h6>
   <input type="date" onkeydown="return false" id="toDate" class="form-control" ng-change="tdateSel()" min="tmindate" max="tmaxdate" ng-model="toDate">
 </div>

这是控制器

$scope.fromDate = new Date((new Date()).valueOf() - 1000 * 3600 * 24 * 7);
$scope.toDate = new Date();

$scope.fmaxdate = $filter('date')(new Date($scope.toDate.valueOf() - 1000 * 3600 * 24), "yyyy-MM-dd");
$scope.tmindate = $filter('date')(new Date($scope.fromDate.valueOf() + 1000 * 3600 * 24), "yyyy-MM-dd");
$scope.tmaxdate = $filter('date')(new Date(), "yyyy-MM-dd");

$scope.fdateSel = function () 
        $scope.tmindate = $filter('date')(new Date($scope.fromDate.valueOf() + 1000 * 3600 * 24), "yyyy-MM-dd");
    

$scope.tdateSel = function () 
        if (undefined != $scope.toDate)
        $scope.fmaxdate = $filter('date')(new Date($scope.toDate.valueOf() - 1000 * 3600 * 24), "yyyy-MM-dd");
    

【问题讨论】:

控制台有错误吗? @MisterMystery 因为我试图获取 valueOf 它记录未定义的值.. 没有别的 哪一行会抛出这个错误? @MisterMystery 当我选择日期 ng-change 触发 fdateSel() 并且错误抛出 $scope.tmindate = $filter('date')(new Date($scope.fromDate.valueOf() + 1000 * 3600 * 24), "yyyy-MM-dd"); 【参考方案1】:

我无法复制您看到的错误,但我注意到您缺少输入中的 ng-model 属性。让我知道这是否有帮助。

下面是一个工作示例:

var app = angular.module("app", []);

app.controller('exampleController', ['$scope', function($scope) 
  $scope.fromDate = new Date((new Date()).valueOf() - 1000 * 3600 * 24 * 7);
  $scope.toDate = new Date();

  $scope.fmaxdate = new Date($scope.toDate.valueOf() - 1000 * 3600 * 24);
  $scope.tmindate = new Date($scope.fromDate.valueOf() + 1000 * 3600 * 24);
  $scope.tmaxdate = new Date();

  $scope.fdateSel = function () 
         if (undefined != $scope.fromDate) 
          $scope.tmindate = new Date($scope.fromDate.valueOf() + 1000 * 3600 * 24);
         
      

  $scope.tdateSel = function () 
          if (undefined != $scope.toDate) 
            $scope.fmaxdate = new Date($scope.toDate.valueOf() - 1000 * 3600 * 24);
            
      
  ]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>

<div ng-app="app" ng-controller="exampleController as ctrl">
  <div class="col-sm-2">
    <h6>From Date</h6>
    <input type="date" onkeydown="return false" ng-model="fromDate" id="fromDate" class="form-control" ng-change="fdateSel()" max="fmaxdate">    
  </div>
  <div class="col-sm-2">
   <h6>To Date</h6>
   <input type="date" onkeydown="return false" ng-model="toDate" id="toDate" class="form-control" ng-change="tdateSel()" min="tmindate" max="tmaxdate">
 </div>
</div>

【讨论】:

我在输入中有 ng-model @MrinmoyDas 对不起,我没有意识到你确实有 ng-model 属性。但是对于fromDate,您确实有一个错字:ngmodel 必须是ng-model 您需要处理 fdateSel 中 $scope.fromDate 为空的清除/删除日期情况。

以上是关于手动选择输入日期到最大值返回未定义的主要内容,如果未能解决你的问题,请参考以下文章

C语言通过gSoap调用自定义的Webservice发布的服务(未实现动态调用,手动输入调用)

未捕获的类型错误:未定义不是日期选择器引导程序的函数

在 ReactJS 中获取调用到 PHP 文件返回未定义

日期选择器给出未定义的值

手动编码 Postscript 时,Ghostscript 会产生未定义的错误

无法读取未定义的属性'$ valid'