javascript - How do I prevent form submission in Angularjs if I am submitting the form using enter key? -
i have applied validation form (it has 2 fields) don't know how prevent submitting,current flow is: after pressing enter key student's name , marks added on localstorage , displayed on screen there unable prevent empty data submitting.
these js functions:
$scope.searchenter = function() { if (event.which == 13 && $scope.student != "") { $scope.addstudent(); } }; $scope.addstudent = function() { if ($scope.marks > 65) { var pass = true; } else { pass = false; } $scope.students.push({ 'studentname': $scope.student, 'marks': parseint($scope.marks), 'pass': pass }); $scope.student = ''; $scope.marks = ''; localstorage['studentslist'] = json.stringify($scope.students); };
this html part:
<div class="row"> <div class="col-xs-12"> <form class="form-horizontal" novalidate name="studentform" > <div class="form-group"> <label class="col-sm-2 control-label" for="student_name">student's name</label> <div class="col-sm-5"> <input ng-model="student" ng-keyup="searchenter()" type="text" class="form-control" id="student_name" ng-required="true" name="stdname"> <div ng-show="studentform.stdname.$touched && studentform.stdname.$invalid"> <small style="color:red; display:block;">enter valid name </small> </div> </div> </div> <div class="form-group"> <label class="col-sm-2 control-label" for="student_marks">marks obtained</label> <div class="col-sm-5"> <input ng-model="marks" ng-keyup="searchenter()" type="number" class="form-control" id="student_marks" ng-required="true">press enter insert student's data in table.</div> </div> </form> </div> </div>
supposing fields correctly validating, prevent submit
use ngdisabled
directive, below:
<button type="submit" ng-disabled="form.$invalid">submit</button>
edit: since op provided full code able give correct answer, is:
change check to:
if (event.which == 13 && $scope.student && $scope.marks) {
snippet working based on code
:
(function() { angular .module('app', []) .controller('mainctrl', mainctrl); mainctrl.$inject = ['$scope']; function mainctrl($scope) { $scope.students = []; $scope.searchenter = function() { if (event.which == 13 && $scope.student && $scope.marks) { $scope.addstudent(); } }; $scope.addstudent = function() { console.log('addstudent called'); $scope.students.push({ 'studentname': $scope.student, 'marks': $scope.marks, 'pass': $scope.marks > 65 }); $scope.student = ''; $scope.marks = ''; localstorage['studentslist'] = json.stringify($scope.students); }; } })();
<!doctype html> <html ng-app="app"> <head> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular.min.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/css/bootstrap.min.css"> </head> <body ng-controller="mainctrl"> <div class="row"> <div class="col-xs-12"> <form class="form-horizontal" novalidate name="studentform"> <div class="form-group"> <label class="col-sm-2 control-label" for="student_name">student's name</label> <div class="col-sm-5"> <input ng-model="student" ng-keyup="searchenter()" type="text" class="form-control" id="student_name" ng-required="true" name="stdname"> <div ng-show="studentform.stdname.$touched && studentform.stdname.$invalid"> <small style="color:red; display:block;">enter valid name </small> </div> </div> </div> <div class="form-group"> <label class="col-sm-2 control-label" for="student_marks">marks obtained</label> <div class="col-sm-5"> <input ng-model="marks" ng-keyup="searchenter()" type="number" class="form-control" id="student_marks" ng-required="true">press enter insert student's data in table.</div> </div> </form> </div> </div> </body> </html>
tips:
the
ngmodel
$scope.marks
number, don't need toparse
, can have'marks': $scope.marks
.the check of
pass
can reduced to:'pass': $scope.marks > 65
Comments
Post a Comment