单文件离线工具如何说清输入错误:校验、焦点与结果一致性

举报
yd_294604443 发表于 2026/10/23 09:08:09 2026/10/23
【摘要】 计算结果正确,还需要让用户知道输入哪里有错、怎样修正,以及眼前结果是否仍然有效。本文结合重试预算计算器的真实页面代码,分析字段说明、错误状态、提交聚焦和旧结果隐藏如何协作,并区分源码检查、核心测试与辅助技术实测各自能够提供的证据。

一、输入框先解释规则


这个离线工具将页面、样式和脚本放在一个 HTML 文件中。五个参数均使用真实 input 元素,并以 label 的 for 属性关联名称。时间字段在标签旁标明毫秒;提示文字进一步说明哪些值允许为零、最多次数是否包含首次请求。


输入框采用文本类型,inputmode="numeric" 只是键盘提示,不能充当校验。表单设置 novalidate,由计算核心统一检查十进制整数格式和范围。空值、小数、负数、指数写法均不能进入正常结果路径;单次超时与最多次数至少为一,其他字段可以为零。


错误信息也区分两类情况:格式不符时说明需要整数、不含小数或符号;超出范围时给出允许的上下限。这样用户可以根据文字修改,不必仅凭红色边框猜测。


二、把错误关联回具体字段


每个输入框的 aria-describedby 都列出本字段提示、错误节点和公共整数说明的标识。渲染函数再按校验结果更新 aria-invalid,并把错误文字写入对应节点的 textContent;没有错误的字段会清空文字、恢复正常状态。


标签提供名称,描述关联解释,错误状态标明是否无效。页面同时使用边框变化和可见文字,避免让颜色成为唯一线索。


表单下方还有带 role="alert" 的错误汇总,提示修正标记项、结果暂不显示。这是页面提供的语义结构;具体读屏软件怎样播报,仍取决于浏览器与辅助技术组合。


三、提交时引导,输入时保留位置


源码把焦点移动作为显式参数:提交表单调用 render(true),普通 input 事件调用默认的 render()。无效提交时,程序按五个字段的固定顺序找到首个错误并调用 focus(),帮助用户直接进入需要修改的位置。


实时输入则更新校验和显示,不走移动焦点的分支。因此用户编辑第二个字段时,即使第一个字段仍有错误,程序也不会把键盘焦点拉回去。CSS 另为输入框、按钮提供 focus-visible 轮廓,便于辨认操作位置。


四、无效输入不能配着旧答案


假设页面原本显示有效计算,用户随后清空预算。输入已经变化,旧次数与耗时若仍像当前答案一样展示,就容易误导人。


实现读取同一份输入快照得到校验结果。一旦无效,就设置 results.hidden,显示修正提示并提前返回。旧结果节点仍存在于 DOM 中,但整块结果被隐藏;这不是删除数据,而是防止继续把它呈现为当前答案。


恢复有效输入后,同一渲染函数更新次数、统计、预算条和文字说明,再用 replaceChildren() 清空旧时间线并生成新行。各区域取自同一个计算结果,减少旧行残留或参数版本不一致造成的误读。


五、说明做到哪里,也说明未证明什么


已有测试文件提取开发目录 HTML 的计算核心,覆盖空值、小数、指数等拒绝案例,但没有创建页面 document,也不直接验证焦点、隐藏状态或读屏播报。本轮仅阅读源码和测试定义,没有重新执行测试或进行浏览器、读屏实测。


可以确认实现包含上述校验与 DOM 更新路径,但不能据此宣称兼容所有读屏软件或符合某一级 WCAG;实际体验应由相应环境中的检查补足。


源码:重试预算计算器:https://gitcode.com/Jerry_a/retry-budget-calculator,重点查看 index.html 的表单结构与 calculator-ui 脚本。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。