2017-12-21 7 views
1

私はこの問題の助けをしたいと思います。ng-repeatチェックボックスの検証では、allを一度チェックする必要があります

私は現在、自分のアプリケーションの検証を行っています。このアプリケーションはクイズであり、必要なすべての質問をしたい(空ではない)。ドロップダウンやテキストでは、フォームをチェックすることはできますが、チェックボックスを使用すると、何か問題があります。すべてのchecboxが有効とみなされる前に一度チェックする必要があります。

マイコード:

<form name="testForm" novalidate ng-submit="vm.success(testForm)"> 

    <div ng-repeat="question in vm.currentQuestions"> 

      <div class="item-accordion" ng-repeat="choice in question.Answers"> 

      <ion-item class="item item-checkbox"> 
       <label class="checkbox"> 
        <input type="checkbox" ng-model="placeholder" name="{{question.QuestionId}}" ng-change="vm.checkboxAnswer(choice)" ng-required="true"> 
       </label> 
        {{choice.Text}} 
      </ion-item> 

      </div> 

    </div> 

</form> 

私はフォームコントローラのログを慰めるとき、私はこの入力の検証チェックを見ることができるが、しかし、何も変更($有効な、$エラー、汚れを$)。何も変わらない理由は分かりません。すべてのボックスを一度チェックした場合にのみ$ validがtrueになりますが、チェックボックスが1つしかチェックされていない場合は$ validがtrueになる必要があります。

+0

あなたのフォームに 'novalidate'が使用されていると思います。 –

+0

@AlekseySoloveyテキストとドロップダウンタイプの入力でうまくいくようです。 –

+0

これはあなたが探しているものです:[チェックボックスのグループにHTML5の "必須"属性を使用していますか? 質問](https://stackoverflow.com/questions/6218494/using-the-html5-required-attribute-for-a-group-of-checkboxes)? –

答えて

0
<div ng-repeat="question in vm.currentQuestions"> 

     <div class="item-accordion" ng-repeat="choice in question.Answers"> 

     <ion-item class="item item-checkbox"> 
      <label class="checkbox"> 
       <input type="checkbox" ng-model="checkbox" name="{{question.QuestionId}}" ng-change="vm.checkboxAnswer(choice)" ng-required="checkboxValidation()"> 
      </label> 
       {{choice.Text}} 
     </ion-item> 

     </div> 

</div> 

あなたはあなたの中にあなたのモデルが空の文字列としてコントローラ宣言する必要があります。

$scope.checkbox=""; 

とあなたはNG-必要で呼び出されたメソッドを返して宣言する必要があります。

$scope.checkboxValidation=function(){ 
if($scope.checkbox=='') 
return true; 
} 
0

あなたはng-submitの横に別のヘルパー関数を使用することができます。

var questions = []; 

function everyChecked() { 
    var formValid = true; 
    foreach(question in questions) { 
     var currentQuestion = false; 
     foreach(answer in question.answers) { 
      currentQuestion = currentQuestion || answer.value 
     } 
     formValid = formValid && currentQuestion; 
    } 

    return formValid; 
} 

ng-submitng-submit = vm.everyChecked() && vm.success(testForm)に変更すると、ng-modelのチェックボックスをオブジェクトのフィールドに正しくバインドして、検証機能内でその値を使用する必要があります。

関連する問題