css 选择一个复选框应取消选择其他复选框

fjnneemd  于 2023-01-03  发布在  其他
关注(0)|答案(2)|浏览(208)

我正在使用一个表单,在该表单中,我将Input标记包含在样式为Cards的div中。目前,用户可以通过单击卡片来选择多个选项。我想要实现的是,用户只能选择一张卡片。如果他选择了其他卡片,则已经选择的卡片将变为未选择。我如何实现这一点?
点击卡片将类module-inactive添加到div,通过降低其不透明度使其看起来未选中。
下面是我的HTML代码:

<div id="heat-one" class="module d-flex flex-column justify-content-center align-items-center">
    <input type="checkbox" class="module-check" id="card1">
    <p>Comb. Heat and Power</p>
</div>
<div class="add module module-inactive d-flex flex-column justify-content-center align-items-center">
    <input type="checkbox" class="module-check" id="card2">
    <p>Heat Pump</p>
</div>
<div class="add module module-inactive d-flex flex-column justify-content-center align-items-center">
    <input type="checkbox" class="module-check" id="card3">
    <p>Natural Gas Heating</p>
</div>
<div class="add module module-inactive d-flex flex-column justify-content-center align-items-center">
    <input type="checkbox" class="module-check" id="card4">
    <p>Wood Heating System</p>
</div>

以下是当前实现的JavaScript:

const checkBoxes = document.querySelectorAll(".module-check");
        checkBoxes.forEach((checkBox) =>
        checkBox.addEventListener("change", (e) => {
            if (checkBox.checked) {
            e.target.parentElement.classList.remove("module-inactive");
            } else {
            e.target.parentElement.classList.add("module-inactive");
            }
        })
        );

我希望我能解释我的问题。

6yoyoihd

6yoyoihd1#

使用单选框,因为它们是互斥的。
将当前所有复选框更改为:

<input type="radio" class="module-check" id="card1" value="card1" name="whatever">

您不需要任何JavaScript就可以使此功能按您期望的方式工作。

guykilcj

guykilcj2#

您所描述的是一个<input type="radio">元素(或多个同名的input元素)的功能,您可以使用单选按钮的:checked pseudo class来设置“cards”的样式。
您可以使用<label>将文本上的单击“Map”到单选按钮。
每个输入元素上的值属性可以用于决定选择希望项。

form {
  display: flex;
  flex-direction: column;
  gap: .5em;
}

input[type='radio'] {
  display: none;
}

input[type='radio']:checked + p {
  opacity: 1;
}

label p {
  border: thin solid black;
  margin: 0;
  opacity: .5;
}
<form>
  <label id="heat-one" class="module d-flex flex-column justify-content-center align-items-center">
    <input type="radio" name="group1" value="1" class="module-check" id="card1">
    <p>Comb. Heat and Power</p>
  </label>
  <label class="add module module-inactive d-flex flex-column justify-content-center align-items-center">
    <input type="radio" name="group1" value="2" class="module-check" id="card2">
    <p>Heat Pump</p>
  </label>
  <label class="add module module-inactive d-flex flex-column justify-content-center align-items-center">
    <input type="radio" name="group1" value="3" class="module-check" id="card3">
    <p>Natural Gas Heating</p>
  </label>
  <label class="add module module-inactive d-flex flex-column justify-content-center align-items-center">
    <input type="radio" name="group1" value="4" class="module-check" id="card4">
    <p>Wood Heating System</p>
  </label>
</form>

相关问题