You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现点击复选框(checkbox)勾选时禁用另一选项、取消勾选时恢复可用?

问题根因

disabled是HTML的布尔属性,只要元素上存在该属性,无论属性值设置为true还是false,都会使元素进入禁用状态。你在取消勾选时调用setAttribute("disabled", "false")的写法无法解除禁用,才会出现另一个复选框一直灰化的问题。

修复方案

方案1:直接修改原有代码逻辑

把两个函数中设置disabled的逻辑,改为直接操作DOM元素的disabled布尔属性即可,修改后的JS代码如下:

function hideFemaleCheckBox() {
  let maleCheckBox = document.getElementById('maleCheckBox');
  let femaleCheckBox = document.getElementById('femaleCheckBox');
  // 直接给disabled属性赋值布尔值,不需要用setAttribute
  femaleCheckBox.disabled = maleCheckBox.checked;
}

function hideMaleCheckBox() {
  let maleCheckBox = document.getElementById('maleCheckBox');
  let femaleCheckBox = document.getElementById('femaleCheckBox');
  maleCheckBox.disabled = femaleCheckBox.checked;
}

HTML部分不需要做任何修改,原来的行内点击事件绑定可以保留。

方案2:优化为通用函数,减少代码冗余

如果你不想写两个重复逻辑的函数,可以改成参数传递的通用写法:
HTML修改为:

<label>
  <input type="checkbox" onClick="toggleCheckBox('male')" value="male" id="maleCheckBox">
  Male
</label>
<label>
  <input type="checkbox" onClick="toggleCheckBox('female')" value="female" id="femaleCheckBox">
  Female<br><br>
</label>

对应的JS代码:

function toggleCheckBox(type) {
  const male = document.getElementById('maleCheckBox');
  const female = document.getElementById('femaleCheckBox');
  if (type === 'male') {
    female.disabled = male.checked;
  } else {
    male.disabled = female.checked;
  }
}

两种方案都可以实现你要的互斥效果:勾选其中一个时另一个禁用,取消勾选后另一个恢复可点击状态。

内容的提问来源于stack exchange,提问作者HustlerSnow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 16:54:03