2016-12-22 6 views
0

AngularJSを使用すると、チェックボックスがオフの場合、送信ボタンをクリックした後、チェックボックスにエラーメッセージが表示されます。AngularJSフォームの検証:submitをクリックした後、チェックボックスにエラーメッセージを表示

私はこの試みた:

<form action="/" method="post" name="myForm" novalidate> 
    <label> 
     <input type="checkbox" name="myCheckbox" ng-model="myCheckbox" value="1" required> 
    </label> 
    <p class="error" ng-show="myForm.$submitted && myForm.myCheckbox.$error.required">Error message</p> 
    <button type="submit" ng-disabled="myForm.$invalid">Submit</button> 
</form> 

をしかし、それは動作しませんでした。送信ボタンをクリックすると、何も起こっていません。フォームタグで "novalidate"を削除するか、送信ボタンで "ng-disabled"を選択すると、チェックボックスがオフになっていてもフォームが送信されます。

お願いします。

+0

あなたは角使用して要求を送信したり、フォームに直接ポストを行うことを計画していますか? – lealceldeiro

+0

フォームに直接投稿したい。 – Bdv

+0

してください、私の答えは編集を参照してください。私はフォームを直接使用して投稿を送信したいので、あなたが今行っているので、これを検証できないと思います。しかし、とにかく、私はあなたのためにいくつかの亜種を書きました。それが役に立てば幸い! :) – lealceldeiro

答えて

1

送信ボタンにng-disabled="myForm.$invalid"があるため、myForm.$submittedが偽であるため、ng-show="myForm.$submitted && myForm.myCheckbox.$error.required"の条件が満たされないため、送信イベントは発生しません(フォームが無効なときにボタンが無効になるため)。

編集:

ここでいくつかの他のユーザーが提案してきたように、私はあなたが今の事をやっている方法を変更した場合、あなたの最善の策は、と思います。私は(非常に似ている)、トウソリューションに考えることができますが、彼らは要求「角度の道」

  • は、ソリューション1送信することを含む:

は、あなたがこのような角度での提出を形成するハンドルを:フォームでこのような何かを(入れ

は私がaction="/" method="post"一部を削除したことに注意してください:

<form ng-submit="onSubmit(myForm)" name="myForm" novalidate> 

を入力し、送信ボタンからng-disabled="myForm.$invalid"を削除してください。そして、それはこの<button type="submit">Submit</button>

ようになる...とコントローラで

$scope.onSubmit = function(form){ 
    if(form.$invalid){ 
     //... do your call to backend here as you like since the call directly from the form was removed 
    } 
} 
  • 解決方法2:

は、同様に、このようにフォームを変更:<form name="myForm" novalidate>

...送信ボタンを次のように変更してください:<button type="submit" ng-click="onSubmit(myForm)">Submit</button>

...そして、フォームが送信される前に

$scope.onSubmit = function(form){ 
     if(form.$invalid){ 
      //... do your call to backend here as you like since the call directly from the form was removed 
     } 
    } 

あなたはこの

ng-show="myForm.myCheckbox.$error.required"

のようにあなたの状態を変更する必要がありそうでない場合が、これは、メッセージが表示されますコントローラで宣言され、同じ機能を使用し

+0

$ error.required式だけを考慮してng-showを変更する必要があると付け加えたいかもしれません。それ以外の場合は良い答えです:) –

+0

これは私の推測でした、ありがとう。あなたはこの問題の解決策を持っていますか? – Bdv

+0

@Tom Johnson:あなたが言うようにng-showを変更すると、送信ボタンをクリックする前にエラーメッセージが表示されます。 – Bdv

0

myForm.$submittedを削除しないでください(Asiel Lealが言及したように)、あなたはsubmit buにng-disabledトンは、とても安全です。

<form action="/" method="post" name="myForm" novalidate> 
    <label> 
     <input type="checkbox" name="myCheckbox" ng-model="myCheckbox" value="1" required> 
    </label> 
    <p class="error" ng-show="myForm.$dirty && myForm.myCheckbox.$error.required">Error message</p> 
    <button type="submit" ng-disabled="myForm.$invalid">Submit</button> 
    </form> 
+0

ありがとうございますが、もし私がそれを行うと、送信ボタンをクリックする前にエラーメッセージが表示されます(チェックボックスをオフにした場合にのみ表示する必要があります)。 – Bdv

+0

@Bdv私は自分の答えを更新しました。 ng-showに "myForm。$ dirty && myForm.myCheckbox。$ error.required"を追加しました。 –

+0

私はちょうど試しました。ここでチェックボックスをオフにしても、[送信]ボタンをクリックしてもエラーメッセージは表示されません。 – Bdv

0

この作業例を試してみてください。

var app = angular.module('myApp',[]); 
 

 
app.controller('myController',function($scope) { 
 
    $scope.validate = function() { 
 
    alert('submitting..'); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app= "myApp" ng-controller="myController"> 
 
    <form name="myForm" ng-submit="myForm.$valid && validate()" novalidate> 
 
       <input type="checkbox" name="checkb" ng-model="formData.checkb" required/> 
 
       <span ng-show="submitted == true && myForm.checkb.$error.required">Please select the checkbox to proceed.</span> 
 
     <input type="submit" value="Submit" ng-click="submitted = true"/> 
 
    </form> 
 
</div>

関連する問題