I have this not so many checkboxes:
I think I got a shorter version here:
var idSelector = function() { return this.id; };
var fruitsGranted = $(":checkbox:checked").map(idSelector).get();
var fruitsDenied = $(":checkbox:not(:checked)").map(idSelector).get();
You can see it in action here: http://jsfiddle.net/XPMjK/3/
var someObj={};
someObj.fruitsGranted=[];
someObj.fruitsDenied=[];
$("input:checkbox").each(function(){
var $this = $(this);
if($this.is(":checked")){
someObj.fruitsGranted.push($this.attr("id"));
}else{
someObj.fruitsDenied.push($this.attr("id"));
}
});
http://jsfiddle.net/UqrYJ/
I would do this something like this:
var all, checked, notChecked;
all = $("input:checkbox");
checked = all.filter(":checked");
notChecked = all.not(":checked)");
After that you can use jQuery.map to get the ids of each collection.
var checkedIds = checked.map(function() {
return this.id;
});
var notCheckedIds = notChecked.map(function() {
return this.id;
});
This can be done using .map, though in this case it is not really different from using .each
:
$(":checkbox").change(function() {
var notChecked = [], checked = [];
$(":checkbox").map(function() {
this.checked ? checked.push(this.id) : notChecked.push(this.id);
});
alert("checked: " + checked);
alert("not checked: " + notChecked);
});
You can test it here.