用HTML表格实现可交互矩阵评分题需用按行隔离name(如q1、q2),每行题干用,列头用,选项用包裹并关联唯一id,配合JavaScript分组校验必填。

怎么用 HTML 表格实现可交互的矩阵评分题
直接用 常见错误是把所有单选按钮的 矩阵题本质是“每行单选”,所以 用 矩阵题对残障用户很不友好,除非你主动补全语义。最常被忽略的是:没给每行题干加 另一个坑是没用 浏览器原生的 更可靠的方式是用 JavaScript 遍历所有题组,检查每组是否至少有一个 真正难的不是搭出表格,是让每行的语义、交互、校验、无障碍都闭环。少一个环节,用户就可能交不出完整数据。 搭结构没问题,但“可交互”这件事,靠表格本身做不到——必须配合
或 ,且每行/每列要能独立选值。纯展示表格没有提交逻辑,用户点了也没反应。name 写成同一个(比如都叫 "score"),结果整张表只能选一个;正确做法是按**行维度**隔离:第1题的所有选项共用 name="q1",第2题用 name="q2",以此类推。 里放题干 + 多个评分选项
,同题的 name 相同,value 设为分值(如 "1"、"5") 标明评分维度(如“非常不满意”→“非常满意”),不要用
required 属性可强制每行必选,但注意:老版本 Safari 对 required 在 radio 上支持不稳定radio 和 number 类型怎么选:看评分规则是否允许多选或填空
是默认选择。只有当业务允许自由打分(比如 0–100 分任意填)、或需要支持小数(如 4.5 分),才换用 。number 的代价是失去点击切换的便捷性,且需额外校验范围(min/max)和步进(step="0.5"),否则用户可能输 999 或 -100。
radio:适合离散分值(1–5 星、Likert 五点量表),语义清晰,移动端点选友好number:适合连续分值或自定义区间,但必须加 min、max、step,否则无效怎么让屏幕阅读器和键盘用户正常操作
,也没给列头加 ,导致读屏软件无法关联“第3行第2列”对应哪道题、哪个分值。 包裹 radio —— 光靠 for/id 关联不够稳定,尤其在动态渲染时容易断链。
服务响应速度 ,内部 必须有唯一 id,label 用 for 指向它,这样读屏能说出“行标题:服务响应速度,列标题:非常不满意”非常不满意 提交前怎么确认用户填完了所有行
required 对 radio 有效,但只检查“该组是否有选中”,不保证“所有组都已选”。如果某行漏选,提交时焦点会跳到第一个无选中的 radio 组,但用户可能根本没注意到提示位置。checked。注意:别用 querySelectorAll('input[type=radio]') 后挨个查 checked,得按 name 分组判断。
name 值:Array.from(new Set([...document.querySelectorAll('input[type=radio]')].map(i => i.name)))
name,查 document.querySelectorAll('input[name="q1"]:checked').length > 0
并提示,别只弹 alert
:invalid 伪类做样式反馈——radio 的 :invalid 触发条件苛刻,兼容性差
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











