Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 好奇angularJs是否有更好的方法来计算复选框的数量_Javascript_Angularjs - Fatal编程技术网

Javascript 好奇angularJs是否有更好的方法来计算复选框的数量

Javascript 好奇angularJs是否有更好的方法来计算复选框的数量,javascript,angularjs,Javascript,Angularjs,我需要检查是否选中了任何复选框。所以我是这样做的 self.isButtonEnabled = function() { var selectLineCheckboxs = document.getElementsByClassName('selectLineRadioInput'), i = 0, checkboxLength = selectLineCheckboxs.length - 1; for (i = 0; i <= checkboxLength; i++) {

我需要检查是否选中了任何复选框。所以我是这样做的

self.isButtonEnabled = function() {
  var selectLineCheckboxs = document.getElementsByClassName('selectLineRadioInput'), 
  i = 0, checkboxLength = selectLineCheckboxs.length - 1;

  for (i = 0; i <= checkboxLength; i++) {
    if (selectLineCheckboxs[i].checked) {
      self.selectLineChecked = true;
      break;
    } else {
      self.selectLineChecked = false;
    }
  }
  return self.selectLineChecked;
};
self.isButtonEnabled=函数(){
var selectLineCheckboxs=document.getElementsByClassName('selectlineradionput'),
i=0,checkboxLength=selectLineCheckboxs.length-1;

对于(i=0;i我一直以这种方式在scope
$scope.Items
中的ng bind变量中使用它。绑定的变量可用于查看检查了哪些项目

 angular.forEach($scope.Items,function(key,value)
                  {          
                                if(key.Selected)
                                {
                                    counter++;
                                }
                     });

是一个JSFiddle来演示相同的

我可以帮助您编写一些代码,将其转换为角度

  • 使用
    angular.element
    (由提供以获取元素)代替
    document.getElementsByClassName
  • 在检查属性是否被选中时,可以使用
    $filter
  • 代码

    self.isButtonEnabled = function() {
        var selectLineCheckboxs = angular.element('.selectLineRadioInput');
        var checkedValues = $filter('filter')(selectLineCheckboxs, { 'checked': true }); //do filtering and contains check value
        self.selectLineChecked = checkedValues.length > 0 ? true : false;
        return self.selectLineChecked;
    };
    
    注意:在使用
    $filter

    更新

    $scope.isButtonEnabled = function () {
        var selectLineCheckboxs = document.getElementsByClassName('selectLineRadioInput');
        var checkedValues = $filter('isPropertyTrue')(selectLineCheckboxs, 'checked');
        self.selectLineChecked = checkedValues.length > 0 ? true : false;
        return self.selectLineChecked;
    };
    
    我建议您创建自己的自定义筛选器,可以用于多种用途,或者动态检查属性值是否为真。我知道您的代码与您在回答中要求的代码相同,但我将您的一些代码作为可重用组件,它可以动态工作,以检查任何属性值是否为真

    过滤器

    .filter('isPropertyTrue', function () {
        return function (elements, property) {
            var returnArray = [];
            angular.forEach(elements, function (val, index) {
                if (val[property]) returnArray.push(val)
            });
            return returnArray;
        }
    });
    
    代码

    $scope.isButtonEnabled = function () {
        var selectLineCheckboxs = document.getElementsByClassName('selectLineRadioInput');
        var checkedValues = $filter('isPropertyTrue')(selectLineCheckboxs, 'checked');
        self.selectLineChecked = checkedValues.length > 0 ? true : false;
        return self.selectLineChecked;
    };
    

    希望这能对您有所帮助,谢谢。

    我从API获得的复选框数量是动态的。因此我无法设置$scope.Items name objif如果您可以使用jQuery,这可能会有帮助。
    $('form input[type=checkbox]:checked')。size()
    我不能只使用jquery javascriptonly@mayank这对你有帮助吗?@mayank很高兴帮助你,谢谢。此行发布了$filter('filter')(selectLineCheckboxs,{'checked':true});这将返回所有复选框,但不是所有选中的复选框!!@downvoter我可以知道否决投票的原因吗?