const saved = sessionStorage.getItem('plan') || 'basic';
form.dataset.plan = saved;
document.querySelectorAll('[data-plan]').forEach((el) =>
el.classList.toggle('is-active', el.dataset.plan === saved));
第一步选了企业版,第二步点返回,套餐高亮还在,提交时 plan_id 是空的,订单按默认版本创建。再点一次返回,值还是空的。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:每一步的 DOM 是重新渲染的,隐藏字段只在第一步初始化时赋值。返回时读的是模板默认值,界面上的高亮来自另一份状态。
这次卡住的地方就在「分步表单隐藏字段丢失」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
处理上按这个顺序:把已选值存到上层状态或 sessionStorage,每步渲染都从同一处读;提交前校验隐藏字段,空值就拦下并回到对应步骤;返回按钮不要重建整个表单,只切换显示。
确认没问题再收工,第一步选企业版后翻回再前进,隐藏字段仍有值,提交生成的订单是企业版。
