单选按钮组的 name 属性必须一致,否则后台收不到值;需显式设置 value、至少一个 checked;表单内提交或 JavaScript 手动获取选中值,并注意后端解析与容错。

单选按钮组的 name 属性必须一致
浏览器只把 name 相同的一组 <input type="radio"> 当作互斥选项,提交时仅发送被选中的那个 value。如果 name 写错、大小写不一致或漏写,后台收不到任何值。
常见错误:给每个单选框配不同 name(比如 gender-male、gender-female),结果提交后后台看到空值或多个参数。
-
name值建议用小写字母+短横线,如user_role、payment_method - 必须为每个
<input>显式设置value,不要依赖默认值或 innerText - 至少一个选项应带
checked属性(否则初始无选中,提交可能为空)
表单提交方式决定参数如何到达后台
参数不是“自动传到后台”,而是随 <form> 的 method 和 action 发起 HTTP 请求。后台能否收到,取决于你是否成功提交了表单,以及后端是否正确解析请求体。
例如:<form method="POST" action="/api/submit"> 提交后,user_role=admin 会作为 POST body 的键值对发送;若 method="GET",则拼在 URL 后如 /api/submit?user_role=admin。
立即学习“前端免费学习笔记(深入)”;
- 确保
<input type="radio">在<form>标签内部,否则不会被提交 - 避免用
button onclick="location.href=..."绕过表单提交——那样 radio 状态根本不会发出去 - 用开发者工具 Network 面板看实际发出的请求,确认 payload 或 query string 中有对应参数
后端接收时注意字段名和数据类型
后台框架(如 Express、Django、Spring Boot)按 name 字符串匹配参数名。它不会识别“这是单选按钮”,只当普通字符串处理。
例如前端 <input name="status" value="active">,后端收到的是字符串 "active",不是布尔值、不是对象。如果你期望布尔逻辑,得自己转换。
- PHP 中用
$_POST['status']或$_GET['status'];未选中时该键不存在,别直接isset()就完事,要容错 - Node.js + Express 默认需
body-parser解析 POST body;GET 参数走req.query.status - 如果值是数字 ID(如
value="123"),后端别假设它是整数——它仍是字符串,需显式parseInt()或类型校验
JavaScript 动态获取选中值用于 AJAX 提交
不用表单 submit,改用 fetch/AJAX 时,不能靠浏览器自动收集,得手动读取当前选中的 value。
最稳妥的方式是查 document.querySelector('input[name="xxx"]:checked'),而不是遍历所有 radio 或依赖 onChange 事件存变量——后者容易因用户快速切换、页面重绘等导致状态滞后。
- 没选中时
querySelector返回null,务必判空再取.value,否则报Cannot read property 'value' of null - 示例:
const selected = document.querySelector('input[name="theme"]:checked');<br>const themeValue = selected ? selected.value : 'default'; - AJAX 的
Content-Type要匹配后端预期:发 JSON 就设application/json并JSON.stringify({theme: themeValue});发表单数据就用application/x-www-form-urlencoded或FormData



















