Как создать функцию для проверки, установлен ли хотя бы один флажок? - PullRequest
0 голосов
/ 07 мая 2020
<div class="form-group">
<div class="row" style="margin-top: 10px;">
<div class="weekDays-selector checkbox-inline" 
     ng-repeat="day in vm.days" 
     ng-if="vm.pen.feeding_frequency.name == 'Custom'">
<input type="checkbox" ng-click="function()"
       id="custom_frequency{{$index}}" 
       name="custom_frequency" 
       class="weekday" / >
<label for="custom_frequency{{$index}}">{{day.name}}</label>
</div>

Это моя HTML часть для отображения флажков на основе моего объекта

Объект выглядит так:

vm.days = [{
            name: i18nFilter('_custom_day_monday_'),
            value: 1
        }, {
            name: i18nFilter('_custom_day_tuesday_'),
            value: 2
        }, {
            name: i18nFilter('_custom_day_wednesday_'),
            value: 3
        }, {
            name: i18nFilter('_custom_day_thursday_'),
            value: 4
        }, {
            name: i18nFilter('_custom_day_friday_'),
            value: 5
        }, {
            name: i18nFilter('_custom_day_saturday_'),
            value: 7
        }, {
            name: i18nFilter('_custom_day_sunday_'),
            value: 7
        }]

Так что все, что мне нужно, это просто проверить, есть ли из этих флажков, созданных из ng-repeat, отмечены. Есть идеи, как это сделать?

Ответы [ 3 ]

0 голосов
/ 07 мая 2020

Вы можете использовать селектор :checked:

document.querySelectorAll(".weekday:checked").length;     // 0 if none is checked
0 голосов
/ 07 мая 2020

, если вы измените флажок, например, выполните

<input type="checkbox" id="custom_frequency{{$index}}" ng-model="vm.selected[$index]" ng-init="vm.selected[$index]=false" name="custom_frequency" on class="weekday" / >

вы получите переменную области видимости, которая называется selected внутри вашего объекта vm. По умолчанию у объекта будет 7 ложных значений. Если вы проверили один день недели, тогда соответствующий индекс объекта обновился с истинным значением .....

, тогда вы можете отфильтровать этот массив, чтобы получить количество проверенных элементов, используя следующий код в файле ts

var found = Object.keys($scope.vm.selected).filter(function(key) {
			 return $scope.vm.selected[key] === true;
		});
console.log(found.length)
0 голосов
/ 07 мая 2020

Получить все флажки с помощью document.querySelector и использовать массив some, чтобы проверить, отмечен ли какой-либо из них

[...document.querySelectorAll('.weekday')].some(item => item.checked)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...