首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未定义的复选框上的ngMessage验证

未定义的复选框上的ngMessage验证
EN

Stack Overflow用户
提问于 2015-05-31 20:53:13
回答 2查看 1.8K关注 0票数 0

我有以下代码:

代码语言:javascript
复制
 <label for="over_13">
    <input type="checkbox" name="over_13" ng-model="user.over_13" ng-required="user.over_13==true">
    <span>I'm over 13</span>
 </label>

    <ng-messages class="modal-error" for="registerForm.over_13.$error" ng-show="registerForm.$submitted" class="error-message">
        <ng-message when="required">Are you over 13 years old?</ng-message>
    </ng-messages>

但是,当我运行它时,我会通过chrome检查在页面的HTML中得到以下内容

代码语言:javascript
复制
<ng-messages class="modal-error ng-inactive" for="registerForm.over_13.$error" ng-show="registerForm.$submitted">
        <!-- ngMessage: undefined -->
    </ng-messages>

我是不是遗漏了什么?

同时,使用required代替ng要求也会产生同样的错误。

代码语言:javascript
复制
 <label for="over_13">
    <input type="checkbox" name="over_13" ng-model="user.over_13" required>
    <span>I'm over 13</span>
 </label>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-31 22:22:18

如果您滥用for,它将需要一个具有相同id的元素。因此,它不适用于name,也不适用于$error

为什么您有ng-show条件作为ng-message作为ng-show="registerForm.$submitted",因为您不应该能够提交表单,因为复选框是required。另外,您已经声明了两次class属性。

令人困惑,但这应该是可行的。

代码语言:javascript
复制
<form name="registerForm">
  <label>
    <input type="checkbox" name="over_13" ng-model="user.over_13" required>
    <span>I'm over 13</span>
  </label>

  <ng-messages ng-show="registerForm.over_13.$invalid">
    <ng-message when="required">Are you over 13 years old?</ng-message>
  </ng-messages>
</form>
票数 0
EN

Stack Overflow用户

发布于 2015-11-24 16:33:21

Mikki对$submitted的看法是错误的。根据AngularJS文档 for $submitted

如果用户提交了表单,即使表单无效,则为True。

如果将一个函数添加到ng-submit上的<form>上,即使您中止该操作,因为(例如) $scope.formName.$valid是假的:

代码语言:javascript
复制
$scope.submit = function () {
   if (!$scope.formName.$valid) {
      // $scope.formName.$submitted === true
      return;
   }
};

$submitted仍然是真的( <form>仍然会得到.ng-submitted类)。完全可能有一个CSS选择器<form>匹配的form.ng-pristine.ng-submitted (即用户没有输入任何内容,但单击了提交按钮)。

另外,Mikki对for属性的看法是错误的。for<label>上通过输入字段上的nameid值(可以是<input><select>等)将<label>链接到输入字段。这只是HTML规范的一部分。它主要用于(例如)单击标签时,链接字段将获得焦点。

但是,for属性在<ng-messaages>上是不同的。它是一个表达式,它的计算结果是一个对象(或者dict/关联数组/如果您愿意的话)。然后,when="blah"元素上的每个<ng-message>属性控制何时显示该特定消息。

$scope.formName.fieldName.$error返回一个对象,其中每个属性对应于一种验证类型。例如,如果字段被标记为必需,则$scope.formName.fieldName.$error.required是一个布尔值,如果该字段有值,则为true;如果没有,则为false。

<ng-messages>按照顺序遍历它下面的所有<ng-message>元素,使用when="string"或(when="string1, string2")从when="object"的结果中提取属性,直到它们中的一个为真为止,然后显示该属性(即,<ng-message>元素的顺序取决于您想要获得的是什么)。

这一切都在AngularJS ngMessage文档中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30562583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档