 
			
				17.10.2019, 07:42
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.07.2019 
					
					
					
						Сообщений: 85
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		laimas,
  
	
 
	| 
		
			Сообщение от laimas
			
		
	 | 
 
	| 
		А выше посмотреть? Зачем менять div на label?
	 | 
 
	
 
 не видел, когда вы это писали. Обновилась страница позже уже   
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				17.10.2019, 07:46
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Aruta
			
		
	 | 
 
	| 
		А вот про цвет не писал - думал сам справлюсь, но не понимаю как связать это с вашим кодом
	 | 
 
	
 
 Добавлять/удалять некий класс блоку floor__item, например active, который и будет раскрашивать, то есть:
 
.floor__item.active {
    background-color: #A5D8E4;
}
$('div.upsale__block__sub-right-wrap').slice(1).on('change', 'input', function(e) {
     
    var a = $(e.delegateTarget).find('input'), chk = a.slice(1);
     
    if(a.eq(0)[0]==this) {
        chk.prop('checked', false);
        this.disabled = true;
        $(e.delegateTarget).find('.floor__item').removeClass('active') 
    }else {
        var c = chk.filter(':checked').length;
        a.eq(0).prop({checked: c, disabled: !c});  
    }
    
    $(this).closest('.floor__item').toggleClass('active')
     
}).find('.floor__item').each(function() {
    $(this).children().wrapAll('<label/>')
});
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось laimas, 17.10.2019 в 08:00.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				17.10.2019, 07:56
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Кстати, код свернуть/развернуть надо тоже дополнить: 
$('div.upsale__block__bot-right__title-wrap').click(function(e) {
        if(e.target.localName!='input') {
            $(this).next()
                   .slideToggle(100)
                   .end()
                   .find('img').toggleClass('arrow_down arrow-up')
                   .end() 
                   .find('.montage__more').hide()
                   .end()
                   .find('.invite').show();
        }
});
Иначе по флажку тоже будет сворачивать.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				17.10.2019, 08:48
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.07.2019 
					
					
					
						Сообщений: 85
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от laimas
			 
		
	 | 
 
	
		Добавлять/удалять некий класс блоку floor__item, например active, который и будет раскрашивать, то есть: 
 
.floor__item.active {
    background-color: #A5D8E4;
}
 
 
$('div.upsale__block__sub-right-wrap').slice(1).on('change', 'input', function(e) {
     
    var a = $(e.delegateTarget).find('input'), chk = a.slice(1);
     
    if(a.eq(0)[0]==this) {
        chk.prop('checked', false);
        this.disabled = true;
        $(e.delegateTarget).find('.floor__item').removeClass('active') 
    }else {
        var c = chk.filter(':checked').length;
        a.eq(0).prop({checked: c, disabled: !c});  
    }
    
    $(this).closest('.floor__item').toggleClass('active')
     
}).find('.floor__item').each(function() {
    $(this).children().wrapAll('<label/>')
});
	 | 
 
	
 
 это я пробовал  
И тут есть момент - closest() не поддерживается IE даже 10+, и при снятии главной галочки, второстепенные снимаются, а окраска с их блоков нет. 
Подключать 2 полифила для closest() не очень хочется, поэтому я и решил переписать с JS на jQuery код, потому что компактней выходит   
P.S. окрашивать надо не .floor__item, а .floor__item-wrap  
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				17.10.2019, 09:06
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Aruta
			
		
	 | 
 
	| 
		И тут есть момент - closest() не поддерживается IE даже 10+
	 | 
 
	
 
 Используйте новую JQ.
 
	
 
	| 
		
			Сообщение от Aruta
			
		
	 | 
 
	| 
		окрашивать надо не .floor__item, а .floor__item-wrap
	 | 
 
	
 
 Проблема, замените на него:
 
$('div.upsale__block__sub-right-wrap').slice(1).on('change', 'input', function(e) {
     
    var a = $(e.delegateTarget).find('input'), chk = a.slice(1);
     
    if(a.eq(0)[0]==this) {
        chk.prop('checked', false);
        this.disabled = true;
        $(e.delegateTarget).find('.floor__item-wrap').removeClass('active') 
    }else {
        var c = chk.filter(':checked').length;
        a.eq(0).prop({checked: c, disabled: !c});  
    }
    
    //$(this).closest('.floor__item-wrap').toggleClass('active')
    //а так для инвалидов
    $(this).parents('.floor__item-wrap').toggleClass('active')   
     
}).find('.floor__item-wrap > div').wrap('<label/>');
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось laimas, 17.10.2019 в 09:14.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				17.10.2019, 09:32
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.07.2019 
					
					
					
						Сообщений: 85
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		laimas, 
 Вы мой кумир   Спасибо огромное! Это то что надо!   
Правда IE всё равно не хочет работать с нажатием на блок, а не на input. Но зато другие работают - этого достаточно.
 
Тему скрипта можно закрывать, а тему благодарностей laimas открывать   
p.s. 
 
	
 
	| 
		
			Сообщение от laimas
			
		
	 | 
 
	| 
		Используйте новую JQ.
	 | 
 
	
 
 это IE его не знает - такой он допотопный до сих пор. Ему чтобы понимать closest(), надо полифилы вставлять для matches и closest  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				17.10.2019, 09:33
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 20.12.2009 
					
					
					
						Сообщений: 1,714
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от laimas
			
		
	 | 
 
	| 
		(a.eq(0)[0]==this
	 | 
 
	
 
  Красотища! А говорят, jQuery разработку упрощает!
 Aruta, два дня не копался, наверное надо давать понятные имена, а то можно легко запутаться с вашим кодом и всё не понимать, что такое там написано!
 
Вам такое почему-то запрещено писать? Я имею в виду про то, что вы печатаете много <div>, и ещё обёртки и ещё обёртки... 
 
<details class="upsale_sub_right">
	<summary>
		<input type="checkbox">
		Choose your floor
	</summary>
	<p class="montage_text">intro text</p>
	<div class="floor_items">
		<label>
			<input type="checkbox" name="groundfloor">
			<span class="floor_item_text">Ground floor</span>
		</label>
		<label>
			<input type="checkbox" name="middlefloor">
			<span class="floor_item_text">Second floor</span>
		</label>
		<label>
			<input type="checkbox" name="topfloor">
			<span class="floor_item_text">Third floor</span>
		</label>
		<label>
			<input type="checkbox" name="apartment">
			<span class="floor_item_text">Apartment Building</span>
		</label>
	</div>
</details>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
$(".upsale_sub_right").on("change", function(event) {
	var inputs = $(this).find("input:not(summary input)");
	var parentInput = $(this).find("summary input");
	if(parentInput.is(event.target)) {
		inputs.prop("checked", parentInput.prop("checked"));
	} else {
		var checkedInputs = inputs.filter(":checked");
		parentInput.prop({
			checked: checkedInputs.length !== 0,
			indeterminate:
				checkedInputs.length !== 0 &&
				inputs.length !== checkedInputs.length
		});
	}
	$(this)
		.find(".floor_items > label.active:has(:not(:checked))").removeClass("active")
		.end()
		.find(".floor_items > label:has(:checked)").addClass("active")
	;
});
</script>
<style>
.floor_items > label {
	display: block;
}
.floor_items > .active {
	background-color: #A5D8E4;
}
</style>
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Malleys, 17.10.2019 в 09:40.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				17.10.2019, 09:39
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.07.2019 
					
					
					
						Сообщений: 85
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Хотел сделать финальный вариант, чтобы другие сразу могли его увидеть, но он не работает тут как надо - проще файлами прикладывать   
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				17.10.2019, 10:00
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Aruta
			
		
	 | 
 
	| 
		это IE его не знает - такой он допотопный до сих пор.
	 | 
 
	
 
 Это разработчики JQ плюнули на старых ишаков, последняя версия которая поддерживает IE8, это 1.8. Сколько можно в старье копаться, вы хотя бы знаете сколько на вашем ресурсе пользователей IE8 и прочего старья?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				17.10.2019, 10:13
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.07.2019 
					
					
					
						Сообщений: 85
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		laimas, 
 этот сайт еще даже не запущен   Желание заказчика, чтобы работало везде более менее одинаково - вот и кручусь. 
Сайт мне достался в том виде, в котором есть сейчас. 
 
Моих доработок там только пара страниц всего, включая backend для них. 
 
Вот теперь могу спокойно приниматься за back для этой страницы.
 
А по поводу поддержки closest(), я знаю что в JS closest и IE не дружат. И тут я думал тоже такая же зависимость причина-следствие сохраняется  
Спасибо за пояснение!  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |