Проверить отмечен ли хотя бы один чекбокс у выбранного блока

189
01 марта 2018, 14:10

Добрый день. Подскажите, пожалуйста, как решить проблему: Есть такая форма с вопросами

$(".progblock > label > input[type='checkbox']").click(function(){ 
  var napravlenie = $(this).closest(".progblock").find(".napravlenie"); 
  this.checked? napravlenie.show() : napravlenie.hide(); 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<div class="progblock"> 
  <label class="bold_name"><input name="public" class="public osnova" value="ОХРАНА ТРУДА" type="checkbox"> ОХРАНА ТРУДА</label> 
 
  <div class="napravlenie hides" style="display:none;"> 
 
    <label class="col-xs-12">Выберите программу курса</label> 
    <div class="col-xs-12"> 
      <label><input name="ot_programm1" data-progs="108" value="Программа 'Охрана труда в организациях'" class="public2" type="checkbox"> Программа 'Охрана труда в организациях'</label> 
      <div class="col-xs-8 napravlenie fr hides" style="display:none;"> 
        <div class="checkbox col-xs-6 forma_obuchen"> 
          <select name="ot_forma1" class="form-control"> 
                     <option value="" selected="selected">Форма обучения</option> 
        			   <option value="Очно-заочная">Очно-заочная</option> 
        			   <option value="Дистанционная">Дистанционная</option> 
        			</select> 
        </div> 
        <div class="checkbox col-xs-6 kolvo_uchenik"> 
          <input name="ot_kolvo1" value="" class="form-control" placeholder="Число слушателей" min="1" type="number"> 
        </div> 
      </div> 
    </div> 
    <div class="col-xs-12"> 
      <label><input name="ot_programm2" data-progs="111" value="Программа повышения квалификации 'Охрана труда для руководителей и специалистов служб охраны труда, работников, на которых приказом работодателя возложены функции специалиста по охране труда'" class="public2" type="checkbox"> Программа повышения квалификации 'Охрана труда для руководителей и специалистов служб охраны труда, работников, на которых приказом работодателя возложены функции специалиста по охране труда'</label> 
      <div class="col-xs-8 napravlenie fr hides" style="display:none;"> 
        <div class="checkbox col-xs-6 forma_obuchen"> 
          <select name="ot_forma2" class="form-control"> 
                     <option value="" selected="selected">Форма обучения</option> 
        			   <option value="Очно-заочная">Очно-заочная</option> 
        			   <option value="Дистанционная">Дистанционная</option> 
        			</select> 
        </div> 
        <div class="checkbox col-xs-6 kolvo_uchenik"> 
          <input name="ot_kolvo2" value="" class="form-control" placeholder="Число слушателей" min="1" type="number"> 
        </div> 
      </div> 
    </div> 
    <div class="col-xs-12"> 
      <label><input name="ot_programm3" data-progs="480" value="Программа профессиональной переподготовки 'Охрана труда и безопасность производственной деятельности'" class="public2" type="checkbox"> Программа профессиональной переподготовки 'Охрана труда и безопасность производственной деятельности'</label> 
      <div class="col-xs-8 napravlenie fr hides" style="display:none;"> 
        <div class="checkbox col-xs-6 forma_obuchen"> 
          <select name="ot_forma3" class="form-control"> 
        			   <option value="" selected="selected">Форма обучения</option> 
        			   <option value="Очно-заочная">Очно-заочная</option> 
        			   <option value="Дистанционная">Дистанционная</option> 
        			</select> 
        </div> 
        <div class="checkbox col-xs-6 kolvo_uchenik"> 
          <input name="ot_kolvo3" value="" class="form-control" placeholder="Число слушателей" min="1" type="number"> 
        </div> 
      </div> 
    </div> 
  </div> 
  <div class="clearfix"></div> 
</div>

Это пример блока одного направления, Охрана труда. Внутри него программы. При выборе чекбокса с Охрана труда разворачиваются соответствующие ему направления. Как сделать такую проверку, что если у выбранной программы пользователь не выбрал ни одно направление, то ему выдать alert?

Answer 1

Данная функция выведет по очереди алерты на каждое направление, в котором не отмечено ни одной программы:

function validate () {
  var $napravlenie_checkboxes = $(".progblock > label > input[type='checkbox']:checked").each(function (index, $napravlenie_checkbox) {
    var $napravlenie = $napravlenie_checkbox.closest(".progblock").find(".napravlenie");
    var checked_checkboxes_length = $napravlenie.find('input[data-progs]:checked').length;
    if (!checked_checkboxes_length) {
      alert('Не выбрано ни одной программы в направлении "' + $napravlenie_checkbox.value + '"');
    }
  });
}
READ ALSO
Как выбрать узлы между элементами, если они вложены в разных родителей

Как выбрать узлы между элементами, если они вложены в разных родителей

Мне необходимо собрать массив из узлов, которые находятся между двумя элементами-метками, находящимися в разных родителяхДопустим, мне нужны...

201
Как получить значение options в js

Как получить значение options в js

Я хочу получать значение и value и содержимого options через jsС value разобрался

117