Javascript 不工作时禁用ng

Javascript 不工作时禁用ng,javascript,angularjs,Javascript,Angularjs,在我的Angular UI中,如果 1) All the inputs are null or empty 2) If the endDate field is less than the startDate itself 我所做的是 <input type="submit" class="btn btn-default pull-right" style="width:100px;" value="Submit" ng-disabled="groupMember

在我的Angular UI中,如果

1) All the inputs are null or empty
2) If the endDate field is less than the startDate itself
我所做的是

           <input type="submit" class="btn btn-default pull-right" style="width:100px;" value="Submit" 
ng-disabled="groupMembershipUserInputForm.$invalid || !(!!groupmembership.chapterCode || !!groupmembership.groupCode || 
!!groupmembership.groupName || !!groupmembership.createdBy || 
!!groupmembership.createdDate || !!groupmembership.startDate ||
!!groupmembership.endDate || !!groupmembership.losCode 
|| groupmembership.compareAgainstStartDate(groupmembership.endDate) )" />

除日期比较检查外,所有字符串空/空检查都正常工作

在我的控制器中,该方法如下所示

$scope.groupmembership.compareAgainstStartDate = function (item) {
    var startDate = $filter('date')(new Date($scope.groupmembership.startDate), 'MM/dd/yyyy');
    var endDate = $filter('date')(new Date($scope.groupmembership.endDate), 'MM/dd/yyyy');

    if (endDate < startDate) {
        $scope.groupmembership.toggleInvalidInput = true;
    }
    else
        $scope.groupmembership.toggleInvalidInput = false;

    return $scope.groupmembership.toggleInvalidInput;
};
$scope.groupmembership.compareAinstStartDate=函数(项){
var startDate=$filter('date')(新日期($scope.groupmembership.startDate),'MM/dd/yyyy');
var endDate=$filter('date')(新日期($scope.groupmembership.endDate),'MM/dd/yyyy');
如果(结束日期<开始日期){
$scope.groupmembership.toggleInvalidInput=true;
}
其他的
$scope.groupmembership.toggleInvalidInput=false;
返回$scope.groupmembership.toggleInvalidInput;
};
它被击中了,但我不知道如果日期比较失败,为什么禁用不会发生


请帮帮我。

您的逻辑非常正确,我怀疑您的
$scope.groupmembership.startDate
$scope.groupmembership.endDate
,因为如果我提供了正确的日期,那么它就会按预期工作。请您尝试提供一些固定的日期来验证您的函数是否正常运行。对我来说,它与实际日期值配合得很好

$scope.startDate = $filter('date')(new Date("07/02/2016"), 'MM/dd/yyyy');
$scope.endDate = $filter('date')(new Date("0710/2016"), 'MM/dd/yyyy');

您的逻辑非常正确,我怀疑您的
$scope.groupmembership.startDate
$scope.groupmembership.endDate
,因为如果我提供了正确的日期,那么它就会按预期工作。请您尝试提供一些固定的日期来验证您的函数是否正常运行。对我来说,它与实际日期值配合得很好

$scope.startDate = $filter('date')(new Date("07/02/2016"), 'MM/dd/yyyy');
$scope.endDate = $filter('date')(new Date("0710/2016"), 'MM/dd/yyyy');
因此,首先:

所有输入均为null或空

为此,只需在所有
输入/选择/…
如果您这样做,
groupMembershipUserInputForm.$invalid
将在其中一个必填字段未填写时为真

这将大大简化您的
ng disabled
,如下所示:

ng-disabled="groupMembershipUserInputForm.$invalid || 
    groupmembership.compareAgainstStartDate(groupmembership.endDate)" 
这是第一个有效的工作步骤。现在,如果您想更进一步,您可以创建一个指令,并具有如下内容:

<input ng-model="afterDate" date-greater-than="beforeDate"/>
因此,首先:

所有输入均为null或空

为此,只需在所有
输入/选择/…
如果您这样做,
groupMembershipUserInputForm.$invalid
将在其中一个必填字段未填写时为真

这将大大简化您的
ng disabled
,如下所示:

ng-disabled="groupMembershipUserInputForm.$invalid || 
    groupmembership.compareAgainstStartDate(groupmembership.endDate)" 
这是第一个有效的工作步骤。现在,如果您想更进一步,您可以创建一个指令,并具有如下内容:

<input ng-model="afterDate" date-greater-than="beforeDate"/>

在您的示例中,日期是字符串类型,因此您可能无法得到正确的结果。要比较日期,请首先使用能给出准确结果的
getTime()
将其转换为time。无需使用过滤器进行日期检查

只需像这样使用:

$scope.groupmembership.compareAgainstStartDate = function () {
    var startDate = new Date($scope.groupmembership.startDate);
    var endDate = new Date($scope.groupmembership.endDate);

    if (endDate.getTime() < startDate.getTime()) {
        $scope.groupmembership.toggleInvalidInput = true;
    }
    else
        $scope.groupmembership.toggleInvalidInput = false;

    return $scope.groupmembership.toggleInvalidInput;
};
$scope.groupmembership.compareAinstStartDate=函数(){
var startDate=新日期($scope.groupmembership.startDate);
var endDate=新日期($scope.groupmembership.endDate);
if(endDate.getTime()
在您的示例中,日期是字符串类型,因此您可能无法得到正确的结果。要比较日期,请首先使用能给出准确结果的
getTime()
将其转换为time。无需使用过滤器进行日期检查

只需像这样使用:

$scope.groupmembership.compareAgainstStartDate = function () {
    var startDate = new Date($scope.groupmembership.startDate);
    var endDate = new Date($scope.groupmembership.endDate);

    if (endDate.getTime() < startDate.getTime()) {
        $scope.groupmembership.toggleInvalidInput = true;
    }
    else
        $scope.groupmembership.toggleInvalidInput = false;

    return $scope.groupmembership.toggleInvalidInput;
};
$scope.groupmembership.compareAinstStartDate=函数(){
var startDate=新日期($scope.groupmembership.startDate);
var endDate=新日期($scope.groupmembership.endDate);
if(endDate.getTime()
只需将开始日期结束日期转换为毫秒,并进行比较

请尝试以下代码一次:

$scope.groupmembership.compareAgainstStartDate = function () {
    var startDate = new Date($scope.groupmembership.startDate).getTime();
    var endDate = new Date($scope.groupmembership.endDate).getTime();

    if (endDate < startDate) {
       $scope.groupmembership.toggleInvalidInput = true;
    } else {
       $scope.groupmembership.toggleInvalidInput = false;
    }

    return $scope.groupmembership.toggleInvalidInput;
};
$scope.groupmembership.compareAinstStartDate=函数(){
var startDate=新日期($scope.groupmembership.startDate).getTime();
var endDate=新日期($scope.groupmembership.endDate).getTime();
如果(结束日期<开始日期){
$scope.groupmembership.toggleInvalidInput=true;
}否则{
$scope.groupmembership.toggleInvalidInput=false;
}
返回$scope.groupmembership.toggleInvalidInput;
};

只需将开始日期结束日期转换为毫秒,并进行比较

请尝试以下代码一次:

$scope.groupmembership.compareAgainstStartDate = function () {
    var startDate = new Date($scope.groupmembership.startDate).getTime();
    var endDate = new Date($scope.groupmembership.endDate).getTime();

    if (endDate < startDate) {
       $scope.groupmembership.toggleInvalidInput = true;
    } else {
       $scope.groupmembership.toggleInvalidInput = false;
    }

    return $scope.groupmembership.toggleInvalidInput;
};
$scope.groupmembership.compareAinstStartDate=函数(){
var startDate=新日期($scope.groupmembership.startDate).getTime();
var endDate=新日期($scope.groupmembership.endDate).getTime();
如果(结束日期<开始日期){
$scope.groupmembership.toggleInvalidInput=true;
}否则{
$scope.groupmembership.toggleInvalidInput=false;
}
返回$scope.groupmembership.toggleInvalidInput;
};
检查此示例检查此示例