页面上同时开了新增和编辑两个弹窗,都用同一套字段模板。点第二个弹窗里的标签,光标总是跳到第一个弹窗的输入框,两边的 id 一模一样。日志里能对上时间点,这种反而好排。
模板里的 id 是写死的,组件渲染两份就产生两组相同 id。label 的 for 只会匹配文档里第一个同名元素,浏览器也无法区分输入框属于哪个弹窗。这一点先确认清楚,后面就不用反复试。
const uid = 'f-' + Math.random().toString(36).slice(2, 8); // label for = uid + '-name' // input id = uid + '-name'
这次卡住的地方就在「表单 id 重复」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
改完顺手把文档补一句,省得下次自己重新推一遍。
处理上按这个顺序:给每个表单实例生成唯一前缀,拼到所有 id 和 for 上;或者用 label 直接包裹 input,省掉 for 的匹配;上线前用脚本扫一遍重复 id,提前拦住。
结果对不对很好判断,两个弹窗同时打开,点各自标签都聚焦到本弹窗内的输入框,控制台查不到重复 id。
