javascript - Angularjs 表单验证

标签 javascript angularjs forms validation angularjs-ng-form

我的页面上有一个联系人列表,每个联系人都显示在 <input> 中字段(它们都在 <form> 元素内。当我点击一个字段并对其进行编辑时,我想要进行一些验证 - 例如,如果该字段不为空,我想给这个字段一个红色的 BG 和/或在此确切字段下方显示一条消息。所以我尝试了这个:

<form name="contactsForm" ng-submit="update()" novalidate>
    <tr class="row">
        <td colspan="2">
            <input type="text" class="form-control" placeholder="Search for contact" ng-model="filter.userSearch"/>
            <button class="btn btn-primary btn-sm btn-delete" ng-click="clearSearchField()"></button>
        </td>
        <td>
            <button class="btn btn-warning" ng-click="toggleNewContact()">Add User</button>
            <button type="submit" class="btn btn-danger">Update</button>
        </td>

    </tr>
    <tr class="row" ng-if="addNewContact" ng-repeat="new in newContacts">

        <td><input type="text" class="col-md-12 form-control" ng-model="new.en_name"></td>
        <td><input type="text" class="col-md-12 form-control" ng-model="new.email"></td>
        <td>
            <button ng-click="addMore()" class="btn btn-sm btn-success glyphicon glyphicon-plus"></button>
            <button ng-click="addLess(new)" class="btn btn-sm btn-danger glyphicon glyphicon-minus"></button>
        </td>
    </tr>
    <tr class="row" ng-repeat="contact in contactList | filter:filter.userSearch track by $index">
        <td class="form-group" ng-class="{ 'has-error' : contactsForm.en_name.$invalid && !contactsForm.en_name.$pristine }">
            <input type="text" class="col-md-12 form-control" ng-model="contact.en_name" name="en_name" required>
            <p ng-show="contactsForm.en_name.$invalid && !contactsForm.en_name.$pristine" class="help-block">Name in English is required.</p>
        </td>
        <td>
             <input type="text" class="col-md-12 form-control" ng-model="contact.email" name="{{contact.email}}" required>
        </td>
    </tr>
</form>

那没有用,我没有看到任何消息。我也试过这个:

<input type="text" class="col-md-12 form-control" ng-model="contact.en_name" name="{{contact.en_name}}" required>

但我不知道如何连接这部分name="{{contact.en_name}}"对此 <p ng-show="contactsForm.en_name.$invalid && !contactsForm.en_name.$pristine" .

我也试过使用 $index作为名字:

<td class="form-group" ng-class="{ 'has-error' : contactsForm.$index.$invalid && !contactsForm.$index.$pristine }">
    <input type="text" class="col-md-12 form-control" ng-model="contact.en_name" name="{{$index}}" required>
    <p ng-show="contactsForm.$index.$invalid && !contactsForm.$index.$pristine" class="help-block">Name in English is required.</p>
</td>

但这也不起作用 - 我没有看到任何错误消息。

我做错了什么,我该如何让它发挥作用?

最佳答案

问题是您在 ng-repeat 中的所有输入字段都具有相同的名称属性(因此它们都指向表单对象中的相同 name),因此您需要某种方式使每个名称属性都是唯一的。您可以使用 $index 使其独一无二。

标记

<td class="form-group" ng-class="{ 'has-error' : contactsForm['en_name'+$index].$invalid && !contactsForm['en_name'+$index].$pristine }">
   <input type="text" class="col-md-12 form-control" 
     ng-model="contact.en_name" ng-attr-name="{{'en_name'+$index}}" required>
   <p ng-show="contactsForm['en_name'+$index].$invalid && !contactsForm['en_name'+$index].$pristine" 
    class="help-block">
      Name in English is required.
    </p>
</td>

关于javascript - Angularjs 表单验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36099733/

相关文章:

javascript - 如何将 jQuery 函数作为另一个函数的参数传递?

javascript - 事件发生后如何在AngularJS中自动刷新表记录

php - Symfony2 - 多种形式的主题

javascript - 多项选择的单一输出

javascript - 列表的javascript笛卡尔积

angularjs - 在ui-router中使用leftbar进行布局的嵌套状态或 View ?

javascript - 对象父键 JavaScript

forms - Symfony 登录页面的表单构建器

HTML:仅使用 CSS 修改复选框/单选样式

javascript - 禁用下拉框中特定选择的文本字段