Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2015, 11:24   #11
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Пройдет года два и чувак допрет до MVC-фреймворков...
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 17.09.2015, 16:44   #12
_dvr
Пользователь
 
Регистрация: 29.07.2015
Сообщений: 15
По умолчанию

Опять вопросы по форме.
Код, значит, такой:



Код:
<p>Форма №1</p>
<form name="F1">
<input type = 'checkbox' class="check_F1" id = 'ch1' onchange = 'showOrHide("ch1", "res1");'/>1-1<br>
<input type = 'checkbox' class="check_F1" id = 'ch2' onchange = 'showOrHide("ch2", "res2");' />1-2<br>
<input type = 'checkbox' class="check_F1" id = 'ch3' onchange = 'showOrHide("ch3", "res3");' />1-3<br>
</form>


<p>Форма №2</p>
<form name="F2">
<input type = 'checkbox' class="check_F2" id = 'ch4' onchange = 'showOrHide("ch4", "res4");' />2-1<br>
<input type = 'checkbox' class="check_F2" id = 'ch5' onchange = 'showOrHide("ch5", "res5");' />2-2<br>
<input type = 'checkbox' class="check_F2" id = 'ch6' onchange = 'showOrHide("ch6", "res6");' />2-3<br>
<input type = 'checkbox' class="check_F2" id = 'ch7' onchange = 'showOrHide("ch7", "res7");' />2-4<br>
</form>


<p>Форма №3</p>
<form name="F3">
<input type = 'checkbox' class="check_enable_F1" id = 'ch8' disabled onchange = 'showOrHide("ch8", "res8");' />3-1 — включается если задействована форма №1<br>
<input type = 'checkbox' class="check_enable_F2" id = 'ch9' disabled  onchange = 'showOrHide("ch9", "res9");' />3-2 — включается если задействована форма №2<br>
</form>



<script>
//-----------------------------Запрет чекинга в третьей форме--------------------
(function($) {
$(function() {

       $('input.check_F2').on('change', function() {
        if ($(this).is(':checked')) {
            $(".check_enable_F2").removeAttr("disabled");  
        } else {
            $(".check_enable_F2").attr("disabled","disabled");
        }
    });

       $('input.check_F1').on('change', function() {
        if ($(this).is(':checked')) {
            $(".check_enable_F1").removeAttr("disabled");  
        } else {
            $(".check_enable_F1").attr("disabled","disabled");
        }
    });

})
})(jQuery) 
//-----------------------------Запрет чекинга в формах больше чем  нужно (сейчас 1)--------------------
var F1 = document.forms.F1;
F1.onchange = function() {
  var n = F1.querySelectorAll('[type="checkbox"]'),
      l = F1.querySelectorAll('[type="checkbox"]:checked');
  for(var j=0; j<n.length; j++)
    if (l.length >= 1) { 
      n[j].disabled = true; 
      for(var i=0; i<l.length; i++)
        l[i].disabled = false;
    } else {
      n[j].disabled = false; 
    }
}
var F2 = document.forms.F2;
F2.onchange = function() {
  var n = F2.querySelectorAll('[type="checkbox"]'),
      l = F2.querySelectorAll('[type="checkbox"]:checked');
  for(var j=0; j<n.length; j++)
    if (l.length >= 1) {
      n[j].disabled = true; 
      for(var i=0; i<l.length; i++)
        l[i].disabled = false;
    } else {
      n[j].disabled = false;
    }
}
var F3 = document.forms.F3;
F3.onchange = function() {
  var n = F3.querySelectorAll('[type="checkbox"]'),
      l = F3.querySelectorAll('[type="checkbox"]:checked');
  for(var j=0; j<n.length; j++)
    if (l.length >= 1) { 
      n[j].disabled = true;
      for(var i=0; i<l.length; i++)
        l[i].disabled = false; 
    } else {
      n[j].disabled = false; 
    }
}
</script>

Ситуация в следующем:
В каждой форме можно включить определенное кол-во чекбоксов (сейчас по одному, для упрощения). Остальные становятся неактивными. В форме № 3 часть чекбоксов становятся активными, когда задействованы чекбоксы из формы № 1, часть, когда задействованы чекбоксы формы № 2. Всё работает, но есть проблема. Если в форме № 3 включить и отключить чекбокс, то все остальные чекбоксы становятся активными. А должны оставаться активными только те, которые относятся к соответствующей форме.

Например:
Включаю чекбокс 1-1 (форма № 1)
Становится активным чекбокс 3-1 (форма № 3)
Включаю чекбокс 3-1 (форма № 3)
ВЫключаю чекбокс 3-1 (форма № 3)
Становятся активными чекбоксы 3-1 и 3-2, хотя чекбокс 3-2 не должен становиться активным.

Я понимаю, что корень проблемы в том, что в скрипте disable из одной функции перекрывает disable из другой.
Как исправить? :-)
_dvr вне форума Ответить с цитированием
Старый 17.09.2015, 21:23   #13
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Тут нужно смотреть, что находится в каком состоянии.

Думаю тебе можно сделать вот так.

Выводи в коде "console.log(и номер формы и бокса)" и смотри в консоль когда кликаешь по боксам, проблема сама вылезет наружу.

Один раз кликнул, тебе всю инфу по всем боксам вывело. Так можно будет уловить виновника

Вообще когда код разростается, то его весь в голове не удержешь, сам юзаю console.log() или console.info()
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Неактивные CheckBox JINC C++ Builder 5 21.05.2015 13:22
неактивные кнопки NARTZISS Общие вопросы .NET 5 21.12.2009 12:05
Неактивные листбоксы vadzik Microsoft Office Excel 15 06.11.2007 22:48