@CreativeStory

Как разделить чекбоксы на группы?

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

Например, есть 2 контейнера/группы. В одном name="tseremonii", в другом name="mesto-provedeniya".
<div class="group">
        <input type="checkbox" class="input_data" name="tseremonii" onclick="onlyOne(this)" value="10">
        <input type="checkbox" class="input_data" name="tseremonii" onclick="onlyOne(this)" value="20">
        <input type="checkbox" class="input_data" name="tseremonii" onclick="onlyOne(this)" value="30">
        <input type="checkbox" class="input_data" name="tseremonii" onclick="onlyOne(this)" value="40">
    </div>
    <div class="group">
        <input type="checkbox" class="input_data" name="mesto-provedeniya" onclick="onlyOne(this)" value="50">
        <input type="checkbox" class="input_data" name="mesto-provedeniya" onclick="onlyOne(this)" value="60">
        <input type="checkbox" class="input_data" name="mesto-provedeniya" onclick="onlyOne(this)" value="70">
        <input type="checkbox" class="input_data" name="mesto-provedeniya" onclick="onlyOne(this)" value="80">
    </div>


есть код, с помощью которого эмулируется поведение радиокнопки, с возможностью выбора только одного пункта и возможностью деактивировать его(checked = false).

function onlyOne(checkbox) {
            var input_item = document.getElementsByClassName('input_data');

            for (var j = 0; j < input_item.length; j++) {
                
                var checkboxes = document.getElementsByName(input_item[j].name);


                for (var i = 0; i < checkboxes.length; i++) {
                    if (checkboxes[i] !== checkbox) checkboxes[i].checked = false;
                }
            }
            
        }


Сейчас в результате выполнения кода checked=true прыгает из идной группы в другую, и не получается выбрать в 2-х группах по пункту.
Где в коде находится ошибка?

demo
  • Вопрос задан
  • 953 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
function onlyOne(checkbox) {
  for (const n of document.getElementsByName(checkbox.name)) {
    n.checked = n === checkbox ? n.checked : false;
  }
}

или

function onlyOne(checkbox) {
  checkbox
    .closest('.group')
    .querySelectorAll('input[type="checkbox"]')
    .forEach(n => n.checked = n.checked && n === checkbox);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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