Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 03.09.2016, 00:04
Аспирант
Отправить личное сообщение для k_DizeL Посмотреть профиль Найти все сообщения от k_DizeL
 
Регистрация: 20.02.2015
Сообщений: 54

рони, да, спасибо все работает. Вот только я могу совершить выбор в каждом из блоков 2 раза, а должно быть 3
$(function() {
    $(".blockq").each(function(c, a) {
        var b = $("input", a);
        $(a).on("click", "input", function(a) {
            $(this).addClass("bl");
            b.prop("disabled", 3 < b.filter(".bl").length)
        })
    });
    var a = $(".blockq");
    a.each(function(d, b) {
        $(b).on("click", "input", function() {
            $(this).addClass("bl");
            a.each(function(a, b) {
                var c = $("input", b);
                c.prop("disabled", c.filter(".bl").length > +(a == d))
            })
        })
    })
});
Ответить с цитированием
  #12 (permalink)  
Старый 03.09.2016, 00:10
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от k_DizeL
Вот только я могу совершить выбор в каждом из блоков 2 раза, а должно быть 3
не понимаю логики и зачем мешать один код с другим?
Ответить с цитированием
  #13 (permalink)  
Старый 03.09.2016, 00:15
Аспирант
Отправить личное сообщение для k_DizeL Посмотреть профиль Найти все сообщения от k_DizeL
 
Регистрация: 20.02.2015
Сообщений: 54

рони, в первой группе радиокнопок до их disabled я могу переключать 3 раза (1 раз только выбрать, остальные 2 раза переместить).
b.prop("disabled", 3 < b.filter(".bl").length)


Как только добавил часть скрипта, в которой активен только тот блок радиокнопок в котором сейчас "щелкаю", а тот блок радиокнопок в котором уже что-то выбрал стал disabled. Имею возможность только 2 раза щелкнуть, а после весь блок радиокнопок неактивны. Видимо фишка в этой части
c.prop("disabled", c.filter(".bl").length > +(a == d))

не могу понять как она влияет
Ответить с цитированием
  #14 (permalink)  
Старый 03.09.2016, 01:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

k_DizeL,
не осилил вашего описания, алгоритм построен на присутствии в блоке элементов с классом bl, если в блоке их больше 1 инпуты в блоке отключаются. пишите далее сами под свою логику на основе этого алгоритма или придумайте свой.
Ответить с цитированием
  #15 (permalink)  
Старый 03.09.2016, 01:36
Аспирант
Отправить личное сообщение для k_DizeL Посмотреть профиль Найти все сообщения от k_DizeL
 
Регистрация: 20.02.2015
Сообщений: 54

рони, а нужно что бы в блоке могло быть от 1 до 3 .bl
Ответить с цитированием
  #16 (permalink)  
Старый 03.09.2016, 07:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

k_DizeL,
нихт ферштейн!
Ответить с цитированием
  #17 (permalink)  
Старый 03.09.2016, 08:57
Профессор
Отправить личное сообщение для Manyasha Посмотреть профиль Найти все сообщения от Manyasha
 
Регистрация: 21.09.2015
Сообщений: 196

Сообщение от рони Посмотреть сообщение
Manyasha,
нужно индекс кнопки учитывать иначе можно случайно нажать одно и тоже 2 раза, а потом уже переключить не получится.
исправляю свой вариант и доделываю под
Сообщение от k_DizeL Посмотреть сообщение
во втором блоке если, я выберу одну радиокнопку то в первом блоке всем пропишется disable.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script>
$(function() {
	var radio = document.querySelectorAll("[type='radio']");
	var counter=[],
		oldVal=[],
		oldName;
	[].forEach.call(radio, function(el, ind) {
	   el.addEventListener("click", function(){
		  var name = this.name;
		  if (oldVal[name] != ind){
			  if (counter[name] != undefined){
				counter[name]+=1;
			  } else{
				counter[name] = 1;
			  }
			  if (counter[name]>2){
				$("[name='" + name + "']").prop('disabled', true);
			  }
			  oldVal[name] = ind;
			  if (oldName && oldName != name){
				$("[name='" + oldName + "']").prop('disabled', true);
			  }
			  oldName = name;
		  }
	   })
	})
});
</script>
<p> ПЕРВЫЙ БЛОК </p>
<input type="radio" name="t1" id="q1" /><label for="q1">1</label><br />
<input type="radio" name="t1" id="q2" /><label for="q2">2</label><br />
<input type="radio" name="t1" id="q3"/><label for="q3">3</label><br />
<input type="radio" name="t1" id="q4" /><label for="q4">4</label><br />
<input type="radio" name="t1" id="q5" /><label for="q5">5</label><br />
 
<p> ВТОРОЙ БЛОК </p>
<input type="radio" name="t2" id="q6" /><label for="q11">1</label><br />
<input type="radio" name="t2" id="q7" /><label for="q22">2</label><br />
<input type="radio" name="t2" id="q8"/><label for="q33">3</label><br />
<input type="radio" name="t2" id="q9" /><label for="q44">4</label><br />
<input type="radio" name="t2" id="q10" /><label for="q55">5</label><br />

<p> ТРЕТИЙ БЛОК </p>
<input type="radio" name="t3" id="q11" /><label for="q11">1</label><br />
<input type="radio" name="t3" id="q12" /><label for="q22">2</label><br />
<input type="radio" name="t3" id="q13"/><label for="q33">3</label><br />
<input type="radio" name="t3" id="q14" /><label for="q44">4</label><br />
<input type="radio" name="t3" id="q15" /><label for="q55">5</label><br />
Ответить с цитированием
  #18 (permalink)  
Старый 04.09.2016, 10:04
Аспирант
Отправить личное сообщение для k_DizeL Посмотреть профиль Найти все сообщения от k_DizeL
 
Регистрация: 20.02.2015
Сообщений: 54

Manyasha, да, то что нужно. А каким образом можно указать исключение. Например для name="t3" можно 4 раза переключить до disable всего блока
Ответить с цитированием
  #19 (permalink)  
Старый 05.09.2016, 11:48
Профессор
Отправить личное сообщение для Manyasha Посмотреть профиль Найти все сообщения от Manyasha
 
Регистрация: 21.09.2015
Сообщений: 196

Rise, хорошо, исправляюсь!
k_DizeL, например, так:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script>
$(function() {
    var counter={},
        oldVal={},
        oldName;
	var limit = {t1: 2, t2: 2, t3: 3};
	$("[type='radio']").on("click", function() {
		var name = this.name;
        if (oldVal[name] != this.id){
			if (counter[name] != undefined){
				counter[name]+=1;
			} else{
				counter[name] = 1;
			}
			if (counter[name]>limit[name]){
				$("[name='" + name + "']").prop('disabled', true);
			}
			oldVal[name] = this.id;
			if (oldName && oldName != name){
				$("[name='" + oldName + "']").prop('disabled', true);
			}
			oldName = name;
        }
		
	});
});
</script>
<p> ПЕРВЫЙ БЛОК </p>
<input type="radio" name="t1" id="q1" /><label for="q1">1</label><br />
<input type="radio" name="t1" id="q2" /><label for="q2">2</label><br />
<input type="radio" name="t1" id="q3"/><label for="q3">3</label><br />
<input type="radio" name="t1" id="q4" /><label for="q4">4</label><br />
<input type="radio" name="t1" id="q5" /><label for="q5">5</label><br />
  
<p> ВТОРОЙ БЛОК </p>
<input type="radio" name="t2" id="q6" /><label for="q11">1</label><br />
<input type="radio" name="t2" id="q7" /><label for="q22">2</label><br />
<input type="radio" name="t2" id="q8"/><label for="q33">3</label><br />
<input type="radio" name="t2" id="q9" /><label for="q44">4</label><br />
<input type="radio" name="t2" id="q10" /><label for="q55">5</label><br />
 
<p> ТРЕТИЙ БЛОК </p>
<input type="radio" name="t3" id="q11" /><label for="q11">1</label><br />
<input type="radio" name="t3" id="q12" /><label for="q22">2</label><br />
<input type="radio" name="t3" id="q13"/><label for="q33">3</label><br />
<input type="radio" name="t3" id="q14" /><label for="q44">4</label><br />
<input type="radio" name="t3" id="q15" /><label for="q55">5</label><br />

Последний раз редактировалось Manyasha, 08.09.2016 в 11:26.
Ответить с цитированием
  #20 (permalink)  
Старый 05.09.2016, 19:32
Аспирант
Отправить личное сообщение для k_DizeL Посмотреть профиль Найти все сообщения от k_DizeL
 
Регистрация: 20.02.2015
Сообщений: 54

Manyasha, спасибо огромное, то что нужно!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как и где задать цикл? Blondinka Events/DOM/Window 2 10.06.2014 15:29
Обрезание текста на определенное количество символов. hfts_rider Events/DOM/Window 7 05.02.2014 14:57
Вывод выбранного элемента radio. Срабатывает только во второй раз. Mukhtar Events/DOM/Window 3 09.08.2012 12:19
переключение radio zionko Элементы интерфейса 3 09.06.2011 16:13
прокрутка div на определенное количество пикселей вниз, вверх skalka jQuery 4 14.02.2011 01:47