表单很长,提交后顶部提示有两处错误,用户停在页面最底部,看不到任何变化,以为已经提交成功就直接关掉了。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
const bad=document.querySelector('[aria-invalid=true]')
bad.focus(); bad.scrollIntoView({block:'center'})
错误提示只在原来的位置渲染,既没有滚动也没有移动焦点,页面上唯一的变化在视线之外,等于压根没有给出反馈,提交状态也就无从判断。这一点先确认清楚,后面就不用反复试。
「校验失败焦点定位」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
具体做法是,提交失败后找到第一个出错的字段并直接聚焦;同时把这一项滚动到视口中间,不要让用户自己去找;页面顶部再汇总一条错误条数,并给出能跳到出处的入口。
改完照着核一遍,在长表单最底部提交一次,视图会自动滚到出错的那一项上面。
