单选按钮失效主因是name属性值不一致、value重复、JS动态插入时name未统一、disabled与checked混用及不可见字符干扰;须确保同组name完全相同、value唯一、动态生成时name统一、正确处理disabled/checked状态,并排查不可见字符。

name属性值不一致导致多选
浏览器只靠name字符串字面量是否完全相等来分组,任何差异都会让单选失效。常见错误包括:
• name="status" 和 name="Status"(大小写不同)
• name="plan" 和 name=" plan"(开头有空格)
• name="user-type" 和 name="user_type"(连字符 vs 下划线)
• 后端期待 name="payment_method",前端却写了 name="payMethod"
同一组内value重复但name正确
虽然name一致能保证互斥视觉行为(只能点一个),但如果多个input[type="radio"]的value相同,服务端收到的仍是那个name对应的单个值——无法区分用户点了哪一项。更糟的是,某些旧版 Safari 或表单序列化工具可能因 value 重复而跳过部分项。
• 必须确保同组每个value唯一,例如用数据库 ID、枚举字符串或语义化标识符
• 避免用 value="true" / value="false" 表示多个开关项,应改为 value="option-a"、value="option-b"
JavaScript动态插入时name未统一
用 JS 动态生成单选按钮(比如从 API 渲染表格行)时,容易漏掉或拼错name:
• 模板字符串中变量未正确插值:name="${group}" 却忘了定义 group
• 循环中硬编码了不同 name:name="row-${i}" 导致每行自成一组
• 使用 innerHTML 拼接时引号嵌套出错,使 name 属性被截断或丢失
• 推荐做法:统一从配置对象取 name 值,或在插入前用 querySelectorAll('input[type="radio"]') 校验所有同名元素数量
使用 PptxGenJS 和 Python 解析,将结构化的 HTML/CSS 幻灯片内容转换为原生、可编辑的 PowerPoint(.pptx)演示文稿。
disabled与checked混用引发状态错乱
disabled 不影响分组逻辑,但会干扰初始状态判断;checked 若多个同名项都设了,浏览器只认最后一个生效,且可能掩盖分组问题。
• 不要给同一组多个 radio 同时加 checked,否则调试时看到“默认选中”其实是偶然行为
• 如果某项需禁用但仍属该组(比如灰显但参与逻辑),保留 name,仅加 disabled,不要删 name
• 用 JS 设置默认选中时,务必先清空同组其他项:document.querySelectorAll('input[name="x"]').forEach(r => r.checked = false); target.checked = true;
立即学习“前端免费学习笔记(深入)”;
实际中最难排查的是 name 看似一样、实则含不可见字符(如零宽空格、BOM),建议复制到编辑器里开显示不可见字符模式,或直接用 JS 控制台执行Array.from(document.querySelectorAll('input[type="radio"]')).map(r => r.name) 看原始值。


















