fix(payment): 添加卡密页导入提示移至卡密数据上方并修正脱离表单后不显示

- 四条导入提示与「单密码模式」开关收拢到「卡密数据」行正上方:切换卡密类型/
  添加方式时,命中的那一条紧邻示例数据与输入框,便于对照填写。原先单密码模式
  开关夹在两条提示之间、提示又落在自动生成字段之后的位置不再使用。
- evalDeps() 与 change 监听不再限定在 .aksrt-cardpass-form 子树内,改为全文档
  查找 [data-dep]。提示块一旦被移出表单子树,限域查找会漏过它,其内联
  display:none 无人清除,表现为「切换到导入卡密后提示不显示」。
- 契约测试同步收紧:断言必须为全文档选择器,并显式禁止回退为限域写法。
This commit is contained in:
2026-09-17 12:03:13 +08:00
parent 670e271ff6
commit 45c7a4a59c
2 changed files with 21 additions and 17 deletions
+4 -2
View File
@@ -135,7 +135,7 @@ function createForm() {
readyState: 'loading',
querySelectorAll(sel) {
if (sel === '.aksrt-cardpass-form [name]') return inputs;
if (sel === '.aksrt-cardpass-form [data-dep]') return rows.map((row) => row.el);
if (sel === '[data-dep]') return rows.map((row) => row.el);
return [];
},
addEventListener(type, fn) { (handlers[type] = handlers[type] || []).push(fn); },
@@ -207,7 +207,9 @@ test('两种行渲染都接入服务端预隐藏,避免首帧铺开', () => {
// foster-parent 到 <table> 之前)仍能被求值并保持隐藏。
assert.match(page, /<td colspan="2"><div'\s*\.\s*\$dep_attr/, '提示块必须自带 data-dep');
assert.match(page, /style="margin:6px 0;padding:6px 12px;'\s*\.\s*\$hidden/, '提示块必须自带初始隐藏状态');
assert.match(script, /querySelectorAll\('\.aksrt-cardpass-form \[data-dep\]'\)/, '求值选择器必须同时覆盖行与提示块');
// 求值范围不限域:提示块被解析器移出表格/表单子树后仍必须被求值。
assert.match(script, /querySelectorAll\('\[data-dep\]'\)/, '求值必须全文档查找 data-dep');
assert.doesNotMatch(script, /querySelectorAll\('\.aksrt-cardpass-form \[data-dep\]'\)/, '求值不得限域在表单内');
});
test('行内脚本不再保留解析期的空操作求值(死代码)', () => {