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

JavaScript监听checkbox change事件控制radio按钮启用禁用

问题根源

你的代码无法运行有两个核心错误:

  • 你使用document.getElementById("protocol")获取单选按钮,但你的HTML中没有任何元素设置id="protocol",选择器返回null,后续属性设置自然失效
  • 你需要控制的是整组共2个name为protocol的单选按钮,不是单个元素,必须遍历所有同组按钮统一修改禁用状态,才能实现整组启用/禁用的效果

另外你写在checkbox上的onsubmit="goPFive(event)"和method="get"是无效属性,这两个属性仅属于<form>标签,写在普通input元素上没有任何作用,可以直接删除。

正确实现代码

HTML部分

<input type="checkbox" name="sip">do this?
<input type="radio" class="testD" name="protocol" value="udp" disabled checked/>UDP
<input type="radio" class="testD" name="protocol" value="tcp" disabled />TCP

JavaScript部分

// 获取触发开关的sip复选框
const sipCheck = document.querySelector('input[name="sip"]');
// 获取整组protocol单选按钮
const protocolGroup = document.querySelectorAll('input[name="protocol"]');

sipCheck.addEventListener('change', () => {
  // 遍历组内所有单选按钮,同步禁用状态
  protocolGroup.forEach(radio => {
    radio.disabled = !sipCheck.checked;
  });
});
逻辑说明
  • document.querySelectorAll会返回匹配选择器的所有元素集合,不需要给单选按钮额外加id就能拿到整组元素
  • 直接把复选框选中状态的取反值赋值给disabled属性:复选框勾选时checked为true,取反后为false,单选按钮启用;取消勾选时checked为false,取反后为true,单选按钮禁用,省去冗余的if/else判断
  • 初始状态下复选框默认未勾选,单选按钮默认加了disabled属性,和逻辑预期一致,不需要额外做初始化处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:39:16