2017-03-23 13 views
2

選択入力フィールドを使用してフォームに表示される有効期限が月と年です。ユーザが月と年をクリックすると、ng-changeはcheckDate()関数を起動して検証します。日付が有効であるか無効であるかを返すためにコンソールを使用します。有効期限が無効であることを示すエラーメッセージも表示されます。しかし、フォームが有効でなくても、select要素に無効な状態を与えることはできません。最終的に私のフォームを有効にする日付が間違っていても、クラスはselect要素のng-invalidからng-validに変わります。選択フィールドが無効な場合、無効なクラスをselect要素に適用するにはどうすればよいですか? $scope.formName.inputName.$setValidity("reason", false)を使用して変更方法角度から選択して無効にする

HTML

<div> 
    <label for="exp_year">Exp Year</label> 
    <select id="exp_year" class="form-control" ng-model="exp_year" ng-change="checkDate()" required> 
     <option value="" disabled><span class="pull-left">Year</span></option> 
     <option value="{{ year }}" ng-repeat="year in years">{{ year }}</option> 
    </select> 
    <i class="material-icons pull-right select-icon">arrow_drop_down</i> 
</div> 

<small class="text-danger">{{errMessage}}</small> 

JS

$scope.checkDate = function() { 
    if (!($scope.exp_month && $scope.exp_month)) return; 
    if ($scope.exp_month <= currentMonth && $scope.exp_year <= currentYear){ 
     console.log('this form is invalid') 
     $scope.errMessage = 'Please enter a valid expiration date'; 
     return true 
    } else { 
     console.log('this form is valid') 
     $scope.errMessage = ''; 
     return false 
    } 
} 

答えて

2

代わりvalid/invalidクラスを追加して、フォームの入力を検証する、カスタム検証を実行するより良い方法があります(Angular Docs

あなたの値が無効であることがわかった場合(あなたのケースでは月末の組み合わせが期限切れになりました..)、有効性をfalseに設定することができます。再び有効な場合はtrueになります。

$scope.formName.$validを入力すると、フォームが有効かどうかを知ることができます。これに基づいて、あなたはさらなる行動を実行することができます。

Working plunkerあなたの例を作成

+0

ありがとうございました!これは完全に機能しました。 ng-invalid-expiredクラスが追加され、日付が正しくない場合はフォームが無効です。 –

+0

私は助けることができるニナモレナ嬉しい:) – tanmay

関連する問題