即使输入无效,AngularJS表单也会验证

Posted

技术标签:

【中文标题】即使输入无效,AngularJS表单也会验证【英文标题】:AngularJS Form validating even though input is invalid 【发布时间】:2014-05-14 17:27:31 【问题描述】:

我有一个表单,其中有一些不在表单标签内的必需输入。即使这些输入无效,表单仍在验证。

如何在不移动表单标签内的所有输入的情况下解决此问题?

特别是当与表单关联的任何输入无效时,我需要使表单无效。不仅仅是包含在元素中的那些。(即任何带有指向表单的表单属性的输入)

示例:

http://jsfiddle.net/v6QkB/

<div class="radio-group">
  <input type="radio" form="testForm" name="test2" value="a" ng-model="formData.test2" ng-required="true">
  <input type="radio" form="testForm" name="test2" value="b" ng-model="formData.test2" ng-required="true">
</div>
<form name="testForm">
  <div class="radio-group">
    <input type="radio" name="test1" value="a" ng-model="formData.test1" ng-required="true">
    <input type="radio" name="test1" value="b" ng-model="formData.test1" ng-required="true">
  </div>
  <input type="submit" value="submit" ng-disabled="testForm.$invalid">
</form>

【问题讨论】:

您需要详细说明您的约束条件。什么是选项,什么不是选项? 唯一的限制是我不能改变页面的布局。这意味着无线电输入必须保留在表单元素之外。 你知道 ng-form 吗?是否可以将所有内容(外部输入和表单)包装在 ngForm 中? 啊,好吧,我以为 ngForm 必须应用于表单元素。我现在看到这是不正确的。这应该通过将其应用于页面包装器来解决问题。谢谢 如果您将其添加为答案,我会继续并将其标记为正确。 【参考方案1】:

您可以使用ngForm 指令来包装所有元素(外部输入和表单)。

根据 the docs ngForm 是表单指令的一个 “嵌套别名。[...] 嵌套表单很有用,例如,如果子的有效性- 需要确定控制组。”

此外,ngForm 的目的是对控件进行分组,而不是替代 &lt;form&gt; 标记的所有功能(例如,发布到服务器,...)”。

<div ng-form="outerForm">
    <div class="radio-group">
        ...
    </div>
    <form name="testForm">
        <div class="radio-group">
            ...
        </div>
        <input type="submit" value="submit" ng-disabled="outerForm.$invalid" />
    </form>
</div>

【讨论】:

以上是关于即使输入无效,AngularJS表单也会验证的主要内容,如果未能解决你的问题,请参考以下文章

Bootstrap 4表单验证在使用无效反馈时不起作用,即使输入'is-valid'

即使输入无效,asp 页面上的自定义验证器也会返回 Page.IsValid (ture)

AngularJs的一个简单的表单验证

即使没有表单字段,Laravel 也会显示验证错误?

即使输入文本有效(Javascript或Jquery),如何强制输入文本无效

即使对于无效的电子邮件,使用 jquery 的电子邮件验证也会返回 true