TR元素通过ng-click触发复选框,但不会触发ng-change on复选框

时间:2016-05-11 21:41:52

标签: angularjs checkbox angularjs-ng-click angularjs-ng-change

我已经成功创建了一个功能,可以检查复选框所在行的ng-click上的隐藏复选框,该复选框是使用ng-repeat生成的。但是,当使用ng-change指令选中复选框时,我还具有将该项添加到单独数组的功能。

如果我取消隐藏元素并直接选中复选框,我的代码可以正常工作,但是如果我在TR上使用ng-click指令,则复选框会被检查(可见),但数组不会更新。如果我再次单击它,它将保持选中状态,并将该项添加到新数组中。

这不是ng-click点击两次点击的问题。这是我的标记:

<tr ng-cloak ng-repeat="item in mostRecent | orderBy:sortType:sortReverse | filter: query" class="hovered" ng-class="{'hide':showReports && item.status == 'Not Started' || showReports && item.status == 'inProgress','rep-checked': bool}" ng-click="bool = !bool">
        <td class="hidden"><div class="checkbox">
            <label class="checkbox">
              <input type="checkbox" ng-change="sync(bool, item)" ng-model="bool" ng-checked="isChecked(item)">
            </label>
          </div></td>

和js:

$scope.isChecked = function(id) {
          var match = false;
          for(var i=0 ; i < $scope.selectionData.length; i++) {
              if($scope.selectionData[i].id == id){
                match = true;
              }
          }
          return match;
};

// Create a new array from the selected data
$scope.selectionData = [];

var selectionData = $scope.selectionData;
var result = selectionData.filter(function(e){ return e.id == id; });

$scope.sync = function(bool, item){
                if ($scope.selectionData) {
                  $scope.selectionData.push(item);
                }
                else {
                  $scope.selectionData.splice(item);
                }
                    console.log('check' + $scope.selectionData);
};

1 个答案:

答案 0 :(得分:1)

经过深入研究后,我发现输入上的ng-click函数没有注册,因为tr元素的ng-click函数实际上并未模拟输入上的click事件。我添加了一个动态ID,并用

的javascript函数替换了ng-click函数
getElementById('checkboxID').click();

它按预期工作。