请问checkbox已经选中的自动取消选中?

<input type="checkbox">

每一行(横排)都有三个checkbox,有多行,行数不定。

我希望:
当任意一行的三个checkbox中的一个被最后选中时,这一行的其他两个已经选中的自动取消选中。

请问js能做到吗?谢谢。

阅读 1.7k
1 个回答

image.png
image.png

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <div class="row">
    <label><input type="checkbox" />Option 1</label>
    <label><input type="checkbox" />Option 2</label>
    <label><input type="checkbox" />Option 3</label>
  </div>

  <div class="row">
    <label><input type="checkbox" />Option 1</label>
    <label><input type="checkbox" />Option 2</label>
    <label><input type="checkbox" />Option 3</label>
  </div>
</body>
<script>
  const rows = document.querySelectorAll('.row');

  // 给每个 checkbox 绑定 change 事件监听器
  rows.forEach(row => {
    row.querySelectorAll('input[type="checkbox"]').forEach(checkbox => {
      checkbox.addEventListener('change', function () {
        const checkedBoxes = Array.from(row.querySelectorAll('input[type="checkbox"]:checked'));
        console.log(checkedBoxes);
        if (checkedBoxes.length > 2) {
          // 取消除当前被选中的 checkbox 以外的其他 checkbox 的选中状态
          row.querySelectorAll('input[type="checkbox"]').forEach(checkbox => {
            console.log(checkbox);
            if (checkbox.checked && this != checkbox) {
              checkbox.checked = false;
            } else {

            }
          });
        }
      });
    });
  });
</script>

</html>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题