【问题标题】:checkbox unchecked to make form invalid未选中复选框以使表单无效
【发布时间】:2015-03-19 03:48:00
【问题描述】:

尝试为我的表单中的复选框添加表单验证器,以防它未选中,表单将具有ng-invalid

<li class="terms_checkbox"><input type="checkbox" id="checkbox_terms" name="terms" /><label for="checkbox_terms"></label></li>
<li class="accept">I have read and accept the terms and conditions</li>

关于什么可以触发将ng-invalid 添加到表单中的任何建议(如果未选中,反之亦然)。

【问题讨论】:

    标签: angularjs angularjs-ng-model angularjs-validation


    【解决方案1】:

    您需要做的就是在复选框上添加required属性和ng-model,以便在表单验证期间进行检查。

    <li class="terms_checkbox">
       <input type="checkbox" 
           id="checkbox_terms" name="terms" ng-model="agreement" required />
       <label for="checkbox_terms"></label>
    </li>
    

    angular.module('app', []).controller('ctrl', function($scope) {
    
    });
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
    <div ng-app="app" ng-controller="ctrl">
      <form name="form" novalidate>
        <ul>
          <li class="terms_checkbox">
            <input type="checkbox" id="checkbox_terms" name="terms" ng-model="agreement" required />
            <label for="checkbox_terms"></label>
          </li>
          <li class="accept">I have read and accept the terms and conditions</li>
          <li>
            <button ng-disabled="form.$invalid">Submit</button>
          </li>
        </ul>
      </form>
    </div>

    【讨论】:

    • 我们能否通过 css 关联某种视觉提示,该按钮被禁用,我正在使用 &lt;button&gt; 的背景图像,比如可能通过一些过滤器等将其变暗。我唯一的挂钩点看到是 html 中的disabled=disabled
    • 确保您可以通过 css 做到这一点。例如:- form.ng-invalid .yourbuttonselector{//provide rule here}
    【解决方案2】:

    嗯,对于初学者来说,这不是一种形式。如果你想保持这种结构,你可以简单地在复选框上应用一个模型,并根据$scope.checked的值有条件地放置一个“无效”属性,如下所示:

    <ul>
      <li class="terms_checkbox">
        <input ng-model="checked" type="checkbox" id="checkbox_terms" name="terms" />
        <label for="checkbox_terms"></label>
      </li>
      <li class="accept">I have read and accept the terms and conditions</li>
    </ul>
    

    但是,我建议将其包围在实际表单中,并将required 属性放在复选框上。这个:

    <form name="myForm">
      <ul>
        <li class="terms_checkbox">
          <input type="checkbox" id="checkbox_terms" name="terms" required />
          <label for="checkbox_terms"></label>
        </li>
        <li class="accept">I have read and accept the terms and conditions</li>
      </ul>
    </form>
    

    现在,如果您检查$scope.myForm.$invalid 属性,它将让您知道表单是否已经过验证。

    【讨论】:

    • li 不应直接嵌套在表单中。
    • 为什么不行?假设添加了提交按钮,我应该没问题。
    • 哦,我只是假设用户想要保持相同的结构。同意,肯定还有其他选择。
    • 在表单中添加li 或在 ul 或 ol 以外的任何内容中是 无效的 Html 我并不是说它不起作用,我说它是无效的 html.. :)
    • 对,我修复了它以将元素添加到无序列表中。错过了,但是原始用户的示例也将无效!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 2021-05-06
    相关资源
    最近更新 更多