Recentemente ho iniziato a giocare con Angular.js e ho deciso di spuntare tutte le caselle di controllo una volta verificata la casella di controllo genitore, cosa che ho fatto usando le direttive ng-model
e ng-checked
.Come selezionare la casella di controllo genitore in base alle caselle di controllo figlio in angular.js?
<div ng-app>
<div ng-controller="Ctrl">
<input type="checkbox" ng-model="parent"/> Select All<br/>
<input type="checkbox" ng-model="child_1" ng-checked="parent" ng-click="getAllSelected()"/> First<br/>
<input type="checkbox" ng-model="child_2" ng-checked="parent" ng-click="getAllSelected()"/> Second<br/>
<input type="checkbox" ng-model="child_3" ng-checked="parent" ng-click="getAllSelected()"/> Three<br/>
<input type="checkbox" ng-model="child_4" ng-checked="parent" ng-click="getAllSelected()"/> Four<br/>
<input type="checkbox" ng-model="child_5" ng-checked="parent" ng-click="getAllSelected()"/> Five<br/>
</div>
</div>
Ora sto cercando di selezionare tutto la casella di controllo genitore una volta tutte le caselle di controllo figlio vengono controllati, ma di fronte a qualche problema.
function Ctrl($scope) {
$scope.getAllSelected = function() {
var chkChild = document.querySelectorAll('input[ng-model^="child_"]').length;
var chkChildChecked = document.querySelectorAll('input[ng-model^="child_"]:checked').length;
if (chkChild === chkChildChecked) $scope.parent= true;
else $scope.parent= false;
}
}
Demo: http://jsfiddle.net/codef0rmer/QekpX/
Possiamo rendere il codice di cui sopra più robusto?
Cosa vi aspettate che accada una volta si deseleziona le caselle di controllo? –
Ho aggiunto il link dimostrativo qui sopra. Una volta che controllo la casella di controllo genitore, controlla tutte le caselle di controllo figlio. Ma quando deseleziono una delle checkbox figlio selezionate, dovrebbe deselezionare anche quella dei genitori. – codef0rmer
Come tutte le checkbox dovrebbero essere sincronizzate? –