Grałem ostatnio z Angular.js i postanowiłem zaznaczyć wszystkie pola wyboru, gdy zaznaczono pole wyboru dla rodzica, co zrobiłem przy użyciu dyrektyw ng-model
i ng-checked
.Jak zaznaczyć pole wyboru dla rodzica na podstawie pól podrzędnych w pliku 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>
Teraz próbuję zaznaczyć zaznaczenie pola wyboru nadrzędnego, gdy wszystkie pola wyboru podrzędnych są zaznaczone, ale występują pewne problemy.
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/
możemy uczynić powyższy kod bardziej wytrzymałe?
Czego spodziewać się zdarzyć raz odznaczyć którykolwiek z wyboru? –
Dodałem link pokazowy powyżej. Gdy zaznaczę pole wyboru nadrzędny, sprawdza wszystkie pola wyboru podrzędne. Ale kiedy odznaczę jedno z zaznaczonych pól podrzędnych, powinno ono odznaczyć także nadrzędne. – codef0rmer
Czy wszystkie pola wyboru powinny być zsynchronizowane? –