Установите все флажки в простых лицах - PullRequest
0 голосов
/ 05 октября 2018

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

1 Ответ

0 голосов
/ 05 октября 2018

Вам не нужно звонить $(this).trigger('check'), потому что это вызовет событие click, ваш предыдущий код $(this).prop('checked', true) уже гарантирует, что флажок будет установлен, чтобы вам больше не нужно было запускать событие click.

Если $(this).prop('checked', true) не работает, вы также можете попробовать: $(this).attr('checked', true);

...