如何确保最后一个未选中复选框保持选中状态?

时间:2015-12-01 22:20:41

标签: javascript html angularjs checkbox

我检查了许多复选框。但是,我想要它,以便如果除了一个之外的所有其他复选框都未选中,并且您尝试取消选中上次选中的复选框,则会出现错误,并且不会取消选中该复选框。这是我的尝试:

Checkbox.html:

<input id ="selectDatasource" class="checkboxPosition" type="checkbox" ng-checked="datasourcesSelected.indexOf(datasource.name) > -1 && datasourcesSelected.length > 1" ng-click="toggleSelection(datasource)"> 

Checkbox.js:

$scope.datasourcesSelected = ['a', 'b', 'c']

//Listen for checked datasources
$scope.toggleSelection = function(datasource){
    if($scope.datasourcesSelected.length === 1){
        alert('Error!')
        //Make sure that checkbox is not unchecked.
        return;
    }
    $scope.checkboxItem = $scope.datasourcesSelected.indexOf(datasource.name);
    //Currently selected within selected
    if($scope.checkboxItem > -1){
        $scope.datasourcesSelected.splice(i, 1);
    }
    else{
        $scope.datasourcesSelected.push(datasource.name);
    }
}

现在我有警报显示但是当我点击它时,最后一个选中的复选框变为未选中状态。我认为,因为我的datasourcesSelected数组未更新,所以复选框将保持选中状态,但事实并非如此。有没有什么办法可以让我最后一个未经检查的复选框继续检查?谢谢!

1 个答案:

答案 0 :(得分:0)

您是否尝试过使用ng-change而不是ng-click?

https://docs.angularjs.org/api/ng/directive/ngChange

再看一下,你可能需要在splice方法中替换(i)使用$ scope.checkboxItem作为数组中的索引选择器。

不确定它是否在其他地方使用但反映当前的代码片段,$ scope.checkboxItem可能只是一个普通的函数范围变量?