【问题标题】:validate multiple date fields验证多个日期字段
【发布时间】:2014-11-19 10:12:40
【问题描述】:

我正在创建一个表单,我有一个日期选择器和一个时间选择器,用于开始日期和结束日期。 所以我总共有4个字段。 我希望能够验证 startdate(startDate 和 startTime 的组合)是否早于 enddate。但我似乎无法弄清楚我应该在哪里以及如何进行此验证。

因此,无论何时编辑其中一个字段,它都应该触发验证。

我似乎无法弄清楚在哪里以及如何创建此验证,我尝试创建一个名为 method-validation 的自定义验证,它可以从控制器中检索一个方法,然后决定验证是否正确,但是我不能只将它放在一个字段上,因为如果我更改另一个字段,验证将不会被触发。

如何让它工作?

底线是,我希望能够将 2 和 2 个字段设置在一起,并比较它们,如果 end 小于 start 则显示一条消息。

跟进:

问题不在于比较两个日期。我能达到的。

<input type="text" ng-model="activity.startDate" date-picker>
<input type="text" ng-model="activity.startTime" time-picker>

<input type="text" ng-model="activity.endDate" date-picker>
<input type="text" ng-model="activity.endTime" time-picker>

确保两个字段的组合没有关闭

【问题讨论】:

    标签: javascript angularjs validation angularjs-directive


    【解决方案1】:
    module.directive('validDate', function(){
        return {
            require: 'ngModel',
            link: function(scope, elm, attrs, ctrl) {
                function  validator(value){
                    var valid = true;
                    if (value != undefined) {
                      value = moment(value, 'YYYY-MM-DD').format('YYYY-MM-DD'); 
                      if (((attrs.validDate == 'start') && (value >= scope.$eval(attrs.otherDate))) || ((attrs.validDate == 'end') && ((value < scope.$eval(attrs.otherDate))))) {
                        valid = false;
                      }                        
                     } else {
                       valid = false;
                     }
    
                    ctrl.$setValidity('date-valid', valid); 
                    return value;
                }
    
                scope.$watch([attrs.otherDate, attrs.ngModel] ,function(newValue) {
                    validator(scope.$eval(attrs.ngModel));
                    }, true);                        
            }
        };
    });
    

    用法:

    <input type="date" ng-model="startDate" valid-date="start" other-date="endDate" />
    <input type="date" ng-model="endDate" valid-date="end" other-date="startDate" />
    

    让我知道它是否有效。我在这里使用MomentJS library 进行格式化,但可以随意更改。

    【讨论】:

    • 如果我只有 2 个字段就可以了。但我有 4 个。日期字段和时间字段都用于开始和结束。 :)
    • 所以请相应地修改指令。不是很难,有这个。
    • 所以你会在每个字段上引用所有其他字段?我真的不知道如何以这种方式很好地解决它。
    • 您必须以某种方式告诉 AngularJS 要验证哪个字段。您可以在验证器或类似的东西中硬编码范围属性名称。
    猜你喜欢
    • 2011-02-23
    • 1970-01-01
    • 2019-06-03
    • 2015-04-19
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多