繁体   English   中英

使用AngularJs验证复选框

[英]Validate checkbox with AngularJs

我再次遇到复选框问题。 我从API获取信息,并显示为复选框。 问题出在我试图添加验证时。 这是我的代码的一部分:

(function() {
    'use strict';
    var fact = {
        templateUrl: './app/components/fact.components.html',
        controller: factCtrl
    };
    angular.module('fApp').component('odcFacturas', fact);
    factCtrl.$inject = ["$scope", "couponApi"];

    function factCtrl($scope, couponApi) {
            var vm = this;
            vm.clientOrder = null;
            vm.all = false;
            vm.sendData = function() {
                vm.apiData = couponApi.get({
                    idOrder: vm.idOrder
                }).$promise.then(function(data) {
                    for (var i = 0; i < data.Response.length; i++) {
                        data.Response[i].Select = vm.all;
                    }
                    vm.coupons = data.Response;
                    vm.combo = data.Response.length > 0;
                });
            }

在这里,我调用信息,然后在代码的下一部分选中所有复选框:

vm.selectAll = function() {
 for (var i = 0; i < vm.coupons.length; i++) {
     vm.coupons[i].Select = vm.all;
 }
 if (vm.all == 0) {
     alert("Select at least one coupon");
 }
}

如何使用“提交”按钮触发三个验证? 我的意思是:我想做的是验证三种情况:

  1. 如果选中了“选择所有复选框”复选框,则提交
  2. 如果没有选中复选框,则显示警报消息
  3. 如果至少选择了一个复选框(或'n'复选框),则提交

在HTML视图上,我有以下内容:

<div class ="container-fluid">
<div class="row">
    <div class="col-md-6">
        <div class="cbx input-group">
            <div class="checkbox" name="imtesting" ng-show="$ctrl.coupons.length > 0">
                    <label><input type="checkbox"
                           ng-show="$ctrl.coupons.length > 0"
                           name="allCoupons"
                           ng-model="$ctrl.all"
                           ng-click="$ctrl.selectAll()"/>Select all coupons</label>



                    <ul>
                        <li ng-repeat="c in $ctrl.coupons">
                        <input type="checkbox"
                               name="couponBox"
                               ng-model="c.Select"
                               ng-click="$ctrl.result()"
                               required/>{{c.CodeCoupon}}
                            <br>
                        </li>
                    </ul>
                <label class="label label-danger" ng-show="submitted == true && !ctrl.newTest()">Select at least one coupon</label>
            </div>
        </div>
    </div>
</div>


希望您能够帮助我。

提前感谢。

您可以使用每个优惠券对象的Select属性,例如

vm.canSubmit = function() {
    for(var i = 0; i< vm.coupons.length; i++)
    {
        if (vm.coupons[i].Select) {
            return true;
        }
    }
    return false;
}

重做您处理selectsAll函数的方式。 当您使用angular时,实际上正在运行一个名为scope.$apply ,它告诉dom更新对象或属性是否已更改。 有时,如果您以使用循环的方式使用for循环,则不会进行更改。

试试这个,它应该可以工作:

vm.selectAll = function()
    {
         vm.all = !vm.all;
         vm.coupons.forEach(function(o){
            o.Select = vm.all;
         })

    }

 vm.submit = function(){
     var checked = 0;
     vm.coupons.forEach(function(o){
        if(o.Select === true)
           checked +=1;
     })
     if(vm.all || checked > 0){
         //submit here
     }
     else if(checked === 0){
         //error
     }
 }

这将同时起作用。 如果选中,则将全部选中;如果未选中,则将全部取消选中。 该验证将适用于所有三种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM