Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.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
Angularjs TR元素通过ng单击触发复选框,但不会触发ng更改复选框_Angularjs_Checkbox_Angularjs Ng Click_Angularjs Ng Change - Fatal编程技术网

Angularjs TR元素通过ng单击触发复选框,但不会触发ng更改复选框

Angularjs TR元素通过ng单击触发复选框,但不会触发ng更改复选框,angularjs,checkbox,angularjs-ng-click,angularjs-ng-change,Angularjs,Checkbox,Angularjs Ng Click,Angularjs Ng Change,我已经成功创建了一个功能,可以在通过ng重复生成的复选框所在行的ng单击上选中隐藏的复选框。但是,我还有一个功能,可以在使用ng change指令选中复选框时将该项添加到单独的数组中 如果我取消隐藏元素并直接选中复选框,我的代码就可以正常工作,但是如果我在TR上使用ng click指令,复选框会被选中(可见),但数组不会被更新。如果我再次单击它,它将保持选中状态,并将该项添加到新数组中 这不是ng click需要两次点击才能启动的问题。这是我的标记: <tr ng-cloak ng-rep

我已经成功创建了一个功能,可以在通过ng重复生成的复选框所在行的ng单击上选中隐藏的复选框。但是,我还有一个功能,可以在使用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);
};
$scope.isChecked=函数(id){
var匹配=假;
对于(变量i=0;i<$scope.selectionData.length;i++){
if($scope.selectionData[i].id==id){
匹配=真;
}
}
复赛;
};
//从所选数据创建新数组
$scope.selectionData=[];
var selectionData=$scope.selectionData;
var result=selectionData.filter(函数(e){returne e.id==id;});
$scope.sync=函数(布尔,项){
如果($scope.selectionData){
$scope.selectionData.push(项目);
}
否则{
$scope.selectionData.splice(项目);
}
log('check'+$scope.selectionData);
};

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

getElementById('checkboxID').click();
这一切都如期而至