Требование логики:
- У меня есть список флажков (я использую 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 (другие флажки, выберите AllCheckbox)
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 () после того, как я инициирую событие click.