@0348raven

Каким образом выполнять JS в отдельно взятом блоке не вовлекая другие такие же?

У меня есть некоторый фильтр с чекбоксами. В каждом отдельном блоке этого фильтра есть элемент, который становясь активным должен снимать активность с других, но только строго в этом блоке не затрагивая элементы других таких же блоков.
У меня есть понимание, что нужно выбирать родительский ближайший элемент. Но у меня не выходит, рассчитываю на помощь.

$("input[type=checkbox]").change(function () {

		var parent = $(this).closest('label');
		var parentBlock = parent.closest($('.search-form__checkbox'));

		parent.toggleClass('checked', $(this).is(':checked'));

		if (parent.hasClass("any") && parent.hasClass("checked")) {
			parentBlock.find($(".js-checkbox").not(parent).removeClass('checked'));
			parentBlock.find($(".js-checkbox").not(parent).find("input[type=checkbox]").attr("checked", false));
		} else if (!parent.hasClass("any") && parent.hasClass("checked")) {
			parentBlock.find($(".js-checkbox.any").removeClass('checked'));
			parentBlock.find($(".js-checkbox.any").find("input[type=checkbox]").attr("checked", false));
		}

	});


Если потребуется еще какая-то информация приведу ниже в комментах.
  • Вопрос задан
  • 157 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
У вас в коде что-то странное происходит. Должно быть вот так - https://jsfiddle.net/koceg/rt190edj/1/
Я немного упростил ваш код, чтобы он стал понятнее.

parentBlock.find($(".js-checkbox").not(parent).removeClass('checked'));

Вот это очень странный кусок. Вы тут, похоже, со скобками запутались. Обратите внимание, что передается в parentBlock.find().
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@EvgenZZ
php, javascript developer
добавьте к блоку класс active перед событием change, потом $("input[type=checkbox]"), так Jquery будет отрабатывать текущий блок + селектор дописать что InputBox у блока с active
Ответ написан
Комментировать
Я бы создал объект с методами, которые определяют поведение всех элементов в каждом отдельном блоке.
Потом каждому блоку привязал бы свой экземпляр этого объекта.
И таким образом все блоки будут изолированы от других - у них у каждого свой объект.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы