简体   繁体   中英

Angular validation on submit

I am trying to create a form that, if you do not fill out any of the fields, will show an alert message if you hit submit. I am trying to work with angular validation to make this happen; however, it is not working at all. Here is the code I currently have:

(1) HTML Event Form file

  function mainController($scope, $http) { $scope.formData = {}; $http.get('/api/events') .success(function(data) { $scope.events = data; initMap(data); for(i = 0; i < data.length; i++){ console.log(data[i].eventLocation); //placeMarker(data[i]); //test(data); } //placeMarker(data); }) .error(function(data) { console.log('Error: ' + data); }); // when submitting the add form, send the text to the node API $scope.createEvent = function() { $http.post('/api/events', $scope.formData) .success(function(data) { $scope.formData = {}; // clear the form so our user is ready to enter another $scope.events = data; console.log(data); }) .error(function(data) { console.log('Error: ' + data); }); } // ATTEMPT AT FORM VALIDATION $scope.validateForm = function() { if (document.getElementById("inputName").value == "" || document.getElementById("inputType").value == "" || document.getElementById("inputLocation").value == "" || document.getElementById("inputDetails").value == "") { alert("Please fill in all required fields!"); return false; } } }; 
 <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div class="col-lg-6"> <!-- Validate form --> <form name="myForm" onsubmit="return validateForm()"> <div class="form-group"> <label>Event Name</label> <input type="text" name="inputName" class="form-control" ng-model="formData.eventName" placeholder="Event name"> </div> <div class="form-group"> <label>Type</label> <select class="form-control" id="inputType" ng-model="formData.eventType"> <option>Option 1</option> <option>Option 2</option> <option>Option 3</option> <option>Option 4</option> </select> </div> <div class="form-group"> <label>Location</label> <select class="form-control" id="inputLocation" ng-model="formData.eventLocation"> <option>Location 1</option> <option>Location 2</option> <option>Location 3</option> </select> </div> <div class="form-group"> <label>Event Details</label> <textarea class="form-control" name="inputDetails" ng-model="formData.eventDetails" rows="2" placeholder="Add details about your event"></textarea> </div> <div class="text-center"> <button id="add-event"type="submit" class="btn btn-primary" ng-click="createEvent()">Submit</button> </div> </form> 

Do angularjs way. https://scotch.io/tutorials/angularjs-form-validation

 angular.module('exApp', []) .controller('ctrl', ['$scope', function($scope) { $scope.save = function(invalid){ if(!invalid){console.log('Form Submitted');} } }]); 
 <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> <body ng-app="exApp" ng-controller="ctrl"> <div> <form name="form" class="css-form" novalidate> <label>Name: <input type="text" ng-model="name" name="userName" required="" /> </label> <br /> <div ng-show="form.$submitted || form.userName.$touched"> <div ng-show="form.userName.$error.required">Tell us your name.</div> </div> <label>E-mail: <input type="email" ng-model="email" name="userEmail" required="" /> </label> <br /> <div ng-show="form.$submitted || form.userEmail.$touched"> <span ng-show="form.userEmail.$error.required">Tell us your email.</span> <span ng-show="form.userEmail.$error.email">This is not a valid email.</span> </div> Gender: <label><input type="radio" ng-model="gender" value="male" />male</label> <label><input type="radio" ng-model="gender" value="female" />female</label> <br /> <label> <input type="checkbox" ng-model="agree" name="userAgree" required="" /> I agree: </label> <input ng-show="agree" type="text" ng-model="agreeMe" required="" /> <br /> <div ng-show="form.$submitted || form.userAgree.$touched"> <div ng-show="!agree || !agreeMe">Please agree and sign.</div> </div> <input type="button" value="Reset" /> <input type="submit" value="Save" ng-disabled="form.$invalid || form.$pristine" ng-click="save(form.$invalid)" /> </form> </div> 

you can do this using ng-submit for form validation

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

and for the validation use ng-model variable to validate the form

$scope.validateForm = function() { 
    if (!$scope.formData.eventName || !$scope.formData.eventType  ) {
      alert("Please fill in all required fields!");
      return false;

  }

Demo

Angular provides some help when using forms. It provides different objects to the form. They are very helpful while validating forms:

  • $pristine: true, if the user has not interacted with the form yet
  • $dirty: true, if the user has interacted with the form
  • $valid: true, if all controls are valid
  • $invalid: true, if at least one control is invalid
  • $error: it contains references to all invalid controls

You can use this object through the form object, in your case myForm. So you can check if the user fills any field using:

$scope.validateForm = function(myForm) {
  if(myForm.$pristine) {
    alert("Please fill in all required fields!");
  }
}

Try this :

  • Add ng-submit into your element with myForm.$valid condition.
  • Add one ng-click="submitted=true" event on submit button that will trigger when click on the submit button.
  • Add required attribute in all the input fields or mandatory fields.

DEMO

 var myApp = angular.module('myApp',[]); myApp.controller('MyCtrl', function($scope) { $scope.validateForm = 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="MyCtrl"> <form name="myForm" ng-submit="myForm.$valid && validateForm()" novalidate> <p ng-show="submitted==true && myForm.inputName.$invalid">Event name is missing.</p> <p ng-show="submitted==true && myForm.inputType.$invalid">Event type is missing.</p> <p ng-show="submitted==true && myForm.inputLocation.$invalid">Event Location is missing.</p> <p ng-show="submitted==true && myForm.inputDetails.$invalid">Event details is missing.</p> <div class="form-group"> <label>Event Name</label> <input type="text" name="inputName" class="form-control" ng-model="formData.eventName" required placeholder="Event name"> </div> <div class="form-group"> <label>Type</label> <select class="form-control" name="inputType" id="inputType" ng-model="formData.eventType" required> <option>Option 1</option> <option>Option 2</option> <option>Option 3</option> <option>Option 4</option> </select> </div> <div class="form-group"> <label>Location</label> <select class="form-control" name="inputLocation" id="inputLocation" ng-model="formData.eventLocation" required> <option>Location 1</option> <option>Location 2</option> <option>Location 3</option> </select> </div> <div class="form-group"> <label>Event Details</label> <textarea class="form-control" name="inputDetails" ng-model="formData.eventDetails" rows="2" placeholder="Add details about your event" required></textarea> </div> <div class="text-center"> <button id="add-event"type="submit" class="btn btn-primary" ng-click="submitted=true">Submit</button> </div> </form> </div> 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM