0

I have created group of checkbox using ng-repeat using the below days object value.

$scope.config = { days: [
             {name:'Monday'},
             {name:'Tuesday'},
             {name:'Wednesday'},
             {name:'Thursday'},
             {name:'Friday'},
             {name:'Saturday'},
             {name:'Sunday'},
        ]}
});

My checkbox using ng-repeat is like that.

<ul class="list-inline">
<li ng-repeat="day in config.days">
    <div class="checkbox">   
        <label class="xsm-label">
            <input type="checkbox" ng-model="day.selected" value="{{day.name}}" id="cs_select_{{day.name}}" name="selected_days" />&nbsp;{{day.name}}
        </label>
    </div>
</li>
</ul> 

I tried much but no luck, kindly help me how to store value of checked checkbox value in a variable.

Thank you.

1
  • what's working? what does it display? maybe it's because the ".selected" property does not exist on your days... Commented May 26, 2017 at 5:31

5 Answers 5

3

You may need to use ng-change directive to execute the on change method of the check box, Inside a function you can store checked values

$scope.selected = function(day, index) {
    day.selected ? $scope._selected.push(day.name) : $scope._selected.splice(index, 1)
}

Your html should look like following:

 <li ng-repeat="day in config.days">
    <div class="checkbox">
        <label class="xsm-label">
          <input type="checkbox" ng-model="day.selected" value="{{day.name}}" id="cs_select_{{day.name}}" 
          name="selected_days" ng-change="selected(day, $index)"/>&nbsp;{{day.name}}
                                          ^^^^^^^^^This ^^^^^^^^^
        </label>
    </div>
 </li>

Working Plunkr

Sign up to request clarification or add additional context in comments.

Comments

0

It's OK. You can get selected value by loop on config.days array and get the item that selected is true.

var app = angular.module('app', []);

app.controller('main', ['$scope', function($scope){
  $scope.config = { days: [
             {name:'Monday'},
             {name:'Tuesday'},
             {name:'Wednesday'},
             {name:'Thursday'},
             {name:'Friday'},
             {name:'Saturday'},
             {name:'Sunday'},
        ]};
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

  <div ng-app="app" ng-controller="main">
<ul class="list-inline">
<li ng-repeat="day in config.days">
    <div class="checkbox">   
        <label class="xsm-label">
            <input type="checkbox" ng-model="day.selected" value="{{day.name}}" id="cs_select_{{day.name}}" name="selected_days" />&nbsp;{{day.name}}
        </label>
    </div>
</li>
</ul>  
<pre>{{config.days | json}}</pre>

</div>

Comments

0

You could use ng-change, whenever a checkbox is checked, update the variable with new value.

Below line of code will keep the last selected checkbox, you could replace it with an empty string if necessary.

$scope.selectedDay= day.selected ? day.name : $scope.selectedDay;

var app = angular.module("MyApp", []).controller("MyCtrl", function($scope) { 

  $scope.config = { days: [
             {name:'Monday'},
             {name:'Tuesday'},
             {name:'Wednesday'},
             {name:'Thursday'},
             {name:'Friday'},
             {name:'Saturday'},
             {name:'Sunday'},
        ]};
        
        
  $scope.storeValue = function(day) {
    $scope.selectedDay= day.selected ? day.name : $scope.selectedDay;
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<body ng-app="MyApp" ng-controller="MyCtrl">
<ul class="list-inline">
<li ng-repeat="day in config.days">
    <div class="checkbox">   
        <label class="xsm-label">
            <input type="checkbox" ng-model="day.selected" value="{{day.name}}" id="cs_select_{{day.name}}" name="selected_days" ng-change="storeValue(day)" />&nbsp;{{day.name}}
        </label>
    </div>
</li>
</ul>

{{selectedDay}}
</body>

Comments

0

Include in your input directive ng-change="onChange(day)":

<input type="checkbox" ng-model="day.selected" id="cs_select_{{day.name}}" name="selected_days" 
            ng-change="onChange(day)"/>&nbsp;{{day.name}}

Then, in your controller, define a function as:

        $scope.onChange = function(day) {

            $scope.lastSelectedDayValue = day.selected ? day.name : '';

            $scope.allSelectedDays = $scope.config.days.filter(function(day){ 
                                                        return day.selected 
                                                    }).map(function(day){
                                                        return day.name 
                                                    });
        }

You will have in $scope.lastSelectedDayValue the last day where you clicked, and in $scope.allSelectedDays an array with all days that are selected in the current moment.

Comments

0

var myApp = angular.module('myApp',[]);

myApp.controller('MyCtrl', function($scope) {
    $scope.config = { days: [
             {name:'Monday'},
             {name:'Tuesday'},
             {name:'Wednesday'},
             {name:'Thursday'},
             {name:'Friday'},
             {name:'Saturday'},
             {name:'Sunday'},
        ]};
        
    var arr = [];    
    $scope.getSelected = function(selectedDay) {
      if(arr.indexOf(selectedDay) == -1) {
        arr.push(selectedDay);
      }
      console.log(arr);
    }
   
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="MyCtrl">
  <ul class="list-inline">
<li ng-repeat="day in config.days">
    <div class="checkbox">   
        <label class="xsm-label">
            <input type="checkbox" ng-model="selectedDay" value="{{day.name}}" id="cs_select_{{day.name}}" name="selected_days" ng-change="getSelected(day.name)"/>&nbsp;{{day.name}}
        </label>
    </div>
</li>
</ul> 
</div>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.