Требование логики:
- У меня есть список флажков (я использую p: selectManyCheckbox).
- У меня также есть флажок, который, если он установлен, также должен быть отмечен другой флажок (я использую p: selectBooleanCheckbox для этого)
- Позвольте мне привести конкретный пример, теперь у меня есть 3 флажка:
+ Выбрать все
+ Элемент 1
+ Элемент 2
Если установлен флажок «выбрать все», будут отмечены «элемент 1» и «элемент 2». Если опция «выбрать все» не отмечена, то «элемент 1» и «элемент 2» не отмечены.
Если один из элементов «элемент 1» или «элемент 2» не отмечен, флажок «выбрать все» должен быть снят. Если отмечены как «элемент 1», так и «элемент 2», флажок «выбрать все» должен быть установлен автоматически.
Чтобы реализовать это, я использую javascript для события onchange каждого флажка.
Для выбора всех onchange = updateOtherCheckboxes (otherCheckboxes, selectAllCheckbox)
function updateCheckboxes(otherCheckboxes, selectAllCheckbox) {
otherCheckboxes.inputs.each(function() {
if (selectAllCheckbox.isChecked()) {
$(this).prop('checked', false);
} else {
$(this).prop('checked', true);
}
$(this).trigger('click');
});
}
Для других флажков onchange = updateSelectAllCheckbox (otherCheckboxes, selectAllCheckbox)
function updateSelectAllCheckbox(otherCheckboxes, selectAllCheckbox) {
var notAllCheckboxesChecked = false;
otherCheckboxes.inputs.each(function() {
if ($(this).is(':checked') == false) {
notAllCheckboxesChecked = true;
return false;
}
});
if (notAllCheckboxesChecked && selectAllCheckbox.input.is(':checked') == true) {
selectAllCheckbox.input.trigger('click');
} else if (!notAllCheckboxesChecked && selectAllCheckbox.input.is(':checked') == false) {
selectAllCheckbox.input.trigger('click');
}
}
Проблема здесь в том, что в функции updateCheckboxes () запускается событие щелчка других флажков и вызывается updateSelectAllCheckbox, но я этого не хочу. Итак, как я могу предотвратить вызов функции updateSelectAllCheckbox () в функции updateCheckboxes () после запуска события щелчка.