Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Form validation - Required one of many in a group

Tags:

In the project I'm working on at the moment I currently have three textboxes and I need to validate that at least one of the text boxes has been populated.

I've been reading into custom validation with Angular directives and I understand you can set the validity of an input in a directive's link function using the following:

ctrl.$parsers.unshift(function(viewValue) {
  // validation logic here
});

The problem I have is that I don't need to set an individual input's validity.. I need to invalidate the entire form if the criteria isn't met. I just wonder how to approach this?

I'm thinking maybe I should create a directive that's placed on the enclosing form itself and then make the form invalid?

I suppose I'm just looking for some guidance into how I should go about this because I'm a little unclear where to start - all the material I'm reading on custom validation seems to be for when you're validating a specific input as opposed to a set of conditions on a form.

I hope I've made myself clear! Thanks..

like image 526
alimac83 Avatar asked Jun 15 '14 08:06

alimac83


People also ask

What are different types of form validation?

In general, there are two main types of form validation: After submit validation. Inline validation.

What are form validation rules?

Form validation requires passing in a validation object with the rules required to validate your form. A validation object includes a list of form elements, and rules to validate each field against.

How is validation done in a form?

Basic Validation − First of all, the form must be checked to make sure all the mandatory fields are filled in. It would require just a loop through each field in the form and check for data. Data Format Validation − Secondly, the data that is entered must be checked for correct form and value.


1 Answers

You can use ng-required to force the user to fill at least one field by checkingthe length attribute of the string.

You can do the following for example:

<form name="myForm">
            <input type="text" ng-model="fields.one" name="firstField" ng-required="!(fields.one.length || fields.two.length || fields.three.length)" />
            <br/>
            <input type="text" name="secondField" ng-required="!(fields.one.length || fields.two.length || fields.three.length)" ng-model="fields.two" />
            <br/>
            <input type="text" ng-model="fields.three" name="thirdField" ng-required="!(fields.one.length || fields.two.length || fields.three.length)" />
            <br/>
            <button type="submit" ng-disabled="!myForm.$valid">Submit</button>
</form>

See this working fiddle example for more details.

You can have more details about required vs ng-required by reading this question

like image 99
Julien Avatar answered Dec 15 '22 13:12

Julien