Что, точно, нужно сделать:
1. Всем чекбоксам дать один класс, например js-checkbox
2. Присвоить каждому чекбоксу name
3. Если name не уникальна между групп, то ввести data-атрибут с названием группы
4. Установить период ожидания между запросами
т.е. каждый чекбокс будет выглядеть так:
<input class="js-checkbox" type="checkbox" id="<Уникальный ID>" name="<Название свойства>" data-type="<Название группы>" value="true" />
<label for="<Уникальный ID чекбокса>">Лэйбл</label>
например:
<input class="js-checkbox" type="checkbox" id="check_atlas_concore" name="atlas_concore" data-type="ArrayCheck" value="true" />
<label for="check_atlas_concore">Atlas Concore</label>
тогда всё будет работать так:
var timer = null;
function pushData()
{
var data = {};
var checkedBoxes = $('.js-checkbox:checked');
var checkedBoxesQ = checkedBoxes.length;
checkedBoxes.each(function(){
var item = {};
item[this.name] = true;
data[$(this).data('type')] = item;
if (!--checkedBoxesQ) {
$.ajax({
type: 'POST',
url: '',
data: data,
success: function(msg) {
}
});
}
});
}
$('.js-checkbox').on('change', function(){
clearTimeout(timer);
timer = setTimeout(pushData, 1000);
});
но, лучше всего обернуть весь фильтр в форму, например с id myFilter
а в name каждого чекбокса включить название группы
например:
<input class="js-checkbox" type="checkbox" id="check_atlas_concore" name="ArrayCheck[atlas_concore]" value="true" />
<label for="check_atlas_concore">Atlas Concore</label>
тогда pushData будет выглядеть ещё лаконичнее:
function pushData()
{
$.ajax({
type: 'POST',
url: '',
data: $('#myFilter').serialize(),
success: function(msg) {
}
});
}