单选按钮组的name属性必须按题区分:同一题所有radio共享相同name以保证互斥,不同题必须用不同name避免干扰;推荐语义化命名如q1、q2,并配合id/for提升可访问性。

单选按钮组的 name 属性必须按题区分
同一道题的所有 必须共享相同的 name 值,否则无法互斥;但不同题目之间必须用不同的 name,否则选了第1题的 A 会意外取消第2题已选的 C。
常见错误是全用 name="answer",结果只能选一题——浏览器把所有 radio 当成同一组了。
实操建议:
- 每道题用语义化 name,比如第1题用
name="q1",第2题用name="q2" - 配合
id和for属性提升可访问性,例如 - 服务端接收时,直接按
q1、q2等 key 取值,结构清晰
如何用 JavaScript 获取全部题目答案
不能只用 document.querySelector('input[name="q1"]:checked') 查一道题——得遍历所有题目的 name。
推荐用 querySelectorAll 批量抓取已选中的 radio:
const answers = {};
document.querySelectorAll('input[type="radio"]:checked').forEach(radio => {
answers[radio.name] = radio.value;
});
// 结果形如 { q1: 'B', q2: 'C', q3: 'A' }
注意点:
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
- 如果某题没选,
answers里就不会有对应 key,需自行判断是否必答 - 别用
getElementsByName,它返回的是动态 HTMLCollection,且不支持链式调用 - 若题目数量动态生成(如从 JSON 渲染),确保每个
name唯一且可预测,方便后续校验
提交前验证有没有漏答题
用户可能跳过某题,而表单默认不会报错。需要手动检查哪些 name 缺失。
假设你知道总共有 3 题,name 分别为 q1、q2、q3:
const requiredNames = ['q1', 'q2', 'q3'];
const missing = requiredNames.filter(name =>
!document.querySelector(`input[name="${name}"]:checked`)
);
if (missing.length > 0) {
alert(`请完成第 ${missing.join('、')} 题`);
return false;
}
更健壮的做法是:在渲染题目时给容器加 data 属性,比如 如果题目 ID 是字符串(比如 安全做法: name 不只是 HTML 层的标识符,它实际构成了请求参数的键名,设计时就得兼顾前后端解析习惯。document.querySelectorAll('.question') 动态推导 requiredNames,避免硬编码。后端接收时 name 值含特殊字符怎么办
user_profile_1)或带中划线(q-1),直接当 name 用没问题,HTML 允许这些字符;但后端框架(如 Express、Django)解析时可能对下划线/中划线敏感,或与保留字冲突。
name="q-user_profile_1"
/^q-[a-z0-9_\-]+$/ 匹配的字段name="1"),PHP 会自动转成数组键导致歧义
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










