简体   繁体   中英

Angular: Ng-show only while off Input Field in Form

https://jsfiddle.net/jzhang172/xu93yubL/

The particular issue is in my E-mail input field .
Is it possible to only display the ng-show message after the field is validated and when the user is not inside the input field?

In other words, I want the ng-show message to disappear if the user is on the input field.

I've tried a number of combinations of logic and haven't been able to get it to work:

 (function(angular) { 'use strict'; angular.module('formExample', []) .controller('ExampleController', ['$scope', function($scope) { $scope.master = {}; $scope.update = function(user) { $scope.master = angular.copy(user); }; $scope.reset = function(form) { if (form) { form.$setPristine(); form.$setUntouched(); } $scope.user = angular.copy($scope.master); }; $scope.reset(); }]); })(window.angular); 
  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script> <body ng-app="formExample"> <div ng-controller="ExampleController"> <form name="form" class="css-form" novalidate> Name: <input type="text" ng-model="user.name" name="uName" required="" /> <br /> <div ng-show="form.$submitted || form.uName.$touched"> <div ng-show="form.uName.$error.required">Tell us your name.</div> </div> E-mail: <input type="email" ng-model="user.email" name="uEmail" required="" /> <br /> <div ng-show="form.$submitted || form.uEmail.$touched"> <span ng-show="form.uEmail.$error.required" style="background:red;">Tell us your email.</span> <span ng-show="form.uEmail.$error.email"style="background:red;">This is not a valid email.</span> </div> </form> </div> </body> 

You can use ngFocus and ngBlur directives to achieve desired result...

Just set some variable false on ngFocus and set true with ngBlur and add that variable into your ngShow condition...

 <input type="email" ng-model="user.email" name="uEmail" required="" ng-focus="showEmailValidationMsg = false;" ng-blur="showEmailValidationMsg = true;"/>
    <br />
    <div ng-show="(form.$submitted || form.uEmail.$touched) && showEmailValidationMsg">
      <span ng-show="form.uEmail.$error.required" style="background:red;">Tell us your email.</span>
      <span ng-show="form.uEmail.$error.email"style="background:red;">This is not a valid email.</span>
    </div>

and here is working JSFIDDLE ...

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