Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 验证时间是未来时间_Javascript_Angularjs_Forms_Angularjs Directive - Fatal编程技术网

Javascript 验证时间是未来时间

Javascript 验证时间是未来时间,javascript,angularjs,forms,angularjs-directive,Javascript,Angularjs,Forms,Angularjs Directive,我想验证我的表单,以便输入的时间和日期不是过去 我目前有两个输入框,一个用于时间,一个用于日期。目前,它们都是使用ng模式进行验证的。当这两个输入框都创建了过去的日期时,如何显示错误(ng invalid) 注:我可以进行实际的过去与未来的计算(使用),我不知道如何合并这些输入框。据我所知,指令只能在一个元素上工作,不能在两个元素上工作 <input type="text" ng-model="startTime" ng-pattern="/^(?:\d|[01]\d|2[0-3]):[0

我想验证我的表单,以便输入的时间和日期不是过去

我目前有两个输入框,一个用于时间,一个用于日期。目前,它们都是使用
ng模式
进行验证的。当这两个输入框都创建了过去的日期时,如何显示错误(
ng invalid

注:我可以进行实际的过去与未来的计算(使用),我不知道如何合并这些输入框。据我所知,
指令
只能在一个元素上工作,不能在两个元素上工作

<input type="text" ng-model="startTime" ng-pattern="/^(?:\d|[01]\d|2[0-3]):[0-5]\d$/">
<input type="text" ng-model="startDate" ng-pattern="/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/">

看一看,当其中一个值发生更改时,您可以使用它在控制器中同时验证这两个元素。

看一看使用不同的输入类型,例如datetime。这会将startTime和startDate合并为1个startDateTime。然后,您将根据设置最大值和最小值的方式获得过去或未来的验证


这就是我最后想到的,它与模型有很大的关系,虽然不太好,但很有效

m.directive("futureDate", function () {
    return {
        require: "ngModel",
        scope: false,
        link: function (scope, element, attrs, ngModel) {

            ngModel.$validators.futureDate = function (modelValue) {
                var time = attrs["futureDate"] == "time" ? modelValue : scope.startTime;
                var date = attrs["futureDate"] == "date" ? modelValue : scope.startDate;

                var datetime = moment(date + "T" + time);

                return datetime > moment();
            }
        }
    }
});
用法:

<input type="text" ng-model="startTime" data-em-future-date="time">
<input type="text" ng-model="startDate" data-em-future-date="date">


您可以构建一个作用域为属性的指令,比如说
ng compare
,并且您传递了要比较的模型属性。此外,您还可以尝试这样做:指令可以在模板中包含任意数量的html元素。见鬼,如果出于某种原因,你真的想让整个页面成为自己的指令。
<input type="text" ng-model="startTime" data-em-future-date="time">
<input type="text" ng-model="startDate" data-em-future-date="date">