【问题标题】:AngularJS form validations: has-error not showing for ng-required fieldsAngularJS表单验证:没有显示ng-required字段的错误
【发布时间】:2016-04-13 12:15:57
【问题描述】:

当用户编辑其地址的任何部分时,每个字段都应该有红色的无效边框,表示需要完整的表单。我无法让“地址”字段显示无效的红色边框。

set-dirty-if='user.objectId' 将每个字段设置为脏。我可能有访问逻辑,但我的想法是强制用户填写每个地址字段并有指标这样做。

为了显示“地址”无效错误,我缺少什么?

(请注意,填充“地址”字段会将城市、州、邮编的边框变为红色,这是需要的)

<form class="form" name='form' class="edit-form-wrapper" novalidate>
    <fieldset class="form-group" ng-class="{'has-error': form.address.$dirty && !form.address.$valid, 'has-feedback': form.address.$dirty && !form.address.$valid}">
      <label class="control-label" for="address">Address</label>
      <input type="text" class="form-control" name="address" ng-model="user.address" set-dirty-if="user.objectId" ng-required="user.city || user.state || user.zip">
      <span ng-show="form.address.$dirty && !form.address.$valid" class="glyphicon glyphicon-remove form-control-feedback" aria-hidden="true"></span>
    </fieldset>


     <fieldset class="form-group" ng-class="{'has-error': form.city.$dirty && !form.city.$valid, 'has-feedback': form.city.$dirty && !form.city.$valid}">
       <label class='control-label' for="city">City</label>
       <input type="text" class="form-control" name="city" ng-model="user.city" set-dirty-if='user.objectId' ng-required='user.address || user.state || user.zip'>
       <span ng-show='form.city.$dirty && !form.city.$valid' class="glyphicon glyphicon-remove form-control-feedback" aria-hidden="true"></span>
     </fieldset>


     <fieldset class="form-group" ng-class="{'has-error': form.state.$dirty && !form.state.$valid, 'has-feedback': form.state.$dirty && !form.state.$valid}">
       <label class='control-label' for="state">State</label>
       <input type="text" class="form-control" name="state" ng-model="user.state" set-dirty-if='user.objectId' ng-required='user.address || user.city || user.zip'>
       <span ng-show='form.state.$dirty && !form.state.$valid' class="glyphicon glyphicon-remove form-control-feedback" aria-hidden="true"></span>
     </fieldset>



     <fieldset class="form-group" ng-class="{'has-error': form.zip.$dirty && !form.zip.$valid, 'has-feedback': form.zip.$dirty && !form.zip.$valid}">
       <label class='control-label' for="zip">Zip Code</label>
       <input type="text" class="form-control" name="zip" ng-model="user.zip" set-dirty-if='user.objectId' ng-required='user.address || user.city || user.state'>
       <span ng-show='form.zip.$dirty && !form.zip.$valid' class="glyphicon glyphicon-remove form-control-feedback" aria-hidden="true"></span>
     </fieldset>
   </form>

【问题讨论】:

    标签: javascript css angularjs html twitter-bootstrap


    【解决方案1】:

    将地址字段的ng-required 值从user.city || user.state || user.zip 更改为(user.city || user.state || user.zip) ? true : false),即:

    <input type="text" class="form-control" name="address" ng-model="user.address"
        ng-required="(user.city || user.state || user.zip) ? true : false">
    

    请参阅下面的工作示例

    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
    
    <div ng-app class="container">
      <form class="form" name='form' class="edit-form-wrapper">
        <fieldset class="form-group" ng-class="{'has-error': form.address.$dirty && !form.address.$valid, 'has-feedback': form.address.$dirty && !form.address.$valid}">
          <label class="control-label" for="address">Address</label>
          <input type="text" class="form-control" name="address" ng-model="user.address" ng-required="(user.city || user.state || user.zip) ? true : false">
          <span ng-show="form.address.$dirty && !form.address.$valid" class="glyphicon glyphicon-remove form-control-feedback" aria-hidden="true"></span>
        </fieldset>
    
    
        <fieldset class="form-group" ng-class="{'has-error': form.city.$dirty && !form.city.$valid, 'has-feedback': form.city.$dirty && !form.city.$valid}">
          <label class='control-label' for="city">City</label>
          <input type="text" class="form-control" name="city" ng-model="user.city" set-dirty-if='user.objectId' ng-required='user.address || user.state || user.zip'>
          <span ng-show='form.city.$dirty && !form.city.$valid' class="glyphicon glyphicon-remove form-control-feedback" aria-hidden="true"></span>
        </fieldset>
    
    
        <fieldset class="form-group" ng-class="{'has-error': form.state.$dirty && !form.state.$valid, 'has-feedback': form.state.$dirty && !form.state.$valid}">
          <label class='control-label' for="state">State</label>
          <input type="text" class="form-control" name="state" ng-model="user.state" set-dirty-if='user.objectId' ng-required='user.address || user.city || user.zip'>
          <span ng-show='form.state.$dirty && !form.state.$valid' class="glyphicon glyphicon-remove form-control-feedback" aria-hidden="true"></span>
        </fieldset>
    
    
    
        <fieldset class="form-group" ng-class="{'has-error': form.zip.$dirty && !form.zip.$valid, 'has-feedback': form.zip.$dirty && !form.zip.$valid}">
          <label class='control-label' for="zip">Zip Code</label>
          <input type="text" class="form-control" name="zip" ng-model="user.zip" set-dirty-if='user.objectId' ng-required='user.address || user.city || user.state'>
          <span ng-show='form.zip.$dirty && !form.zip.$valid' class="glyphicon glyphicon-remove form-control-feedback" aria-hidden="true"></span>
        </fieldset>
      </form>
    </div>

    【讨论】:

      猜你喜欢
      • 2017-10-18
      • 2017-08-02
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      • 2014-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多