fix(payment): 添加卡密页导入提示移至卡密数据上方并修正脱离表单后不显示
- 四条导入提示与「单密码模式」开关收拢到「卡密数据」行正上方:切换卡密类型/ 添加方式时,命中的那一条紧邻示例数据与输入框,便于对照填写。原先单密码模式 开关夹在两条提示之间、提示又落在自动生成字段之后的位置不再使用。 - evalDeps() 与 change 监听不再限定在 .aksrt-cardpass-form 子树内,改为全文档 查找 [data-dep]。提示块一旦被移出表单子树,限域查找会漏过它,其内联 display:none 无人清除,表现为「切换到导入卡密后提示不显示」。 - 契约测试同步收紧:断言必须为全文档选择器,并显式禁止回退为限域写法。
This commit is contained in:
@@ -399,7 +399,16 @@ class PayChargeCards {
|
||||
__('自定义自动生成的长度(不能太短,太短可能会出现重复)如果启用了单密码模式,可以将卡号位数设置为0', 'aksrt')
|
||||
);
|
||||
|
||||
// 导入卡密(与参考主题一致的提示文案与示例)。
|
||||
// 导入提示统一放在「卡密数据」正上方:切换卡密类型/添加方式时,
|
||||
// 命中的那一条紧邻示例数据与输入框,便于对照填写。
|
||||
$this->field_row(
|
||||
__('单密码模式', 'aksrt'),
|
||||
'<input type="checkbox" name="only_pass_s" value="1" />',
|
||||
[
|
||||
['key' => 'add_type', 'op' => '==', 'val' => 'import'],
|
||||
['key' => 'type', 'op' => '==', 'val' => 'custom'],
|
||||
]
|
||||
);
|
||||
$this->submessage_row(
|
||||
[
|
||||
['key' => 'add_type', 'op' => '!=', 'val' => 'auto'],
|
||||
@@ -429,14 +438,6 @@ class PayChargeCards {
|
||||
<div>6484027668705 SkdJZ5vWcpqPxrbs3pqPcpq level=2&time=Permanent ' . esc_html__('永久2级会员', 'aksrt') . '</div>
|
||||
'
|
||||
);
|
||||
$this->field_row(
|
||||
__('单密码模式', 'aksrt'),
|
||||
'<input type="checkbox" name="only_pass_s" value="1" />',
|
||||
[
|
||||
['key' => 'add_type', 'op' => '==', 'val' => 'import'],
|
||||
['key' => 'type', 'op' => '==', 'val' => 'custom'],
|
||||
]
|
||||
);
|
||||
$this->submessage_row(
|
||||
[
|
||||
['key' => 'add_type', 'op' => '==', 'val' => 'import'],
|
||||
@@ -1080,9 +1081,10 @@ class PayChargeCards {
|
||||
return els[0].value;
|
||||
}
|
||||
function evalDeps() {
|
||||
// 选择器同时匹配行元素与提示块自身:提示块可能脱离所在行,
|
||||
// 因此每层都各自带 data-dep 并各自落 display,谁在 DOM 里就管谁。
|
||||
document.querySelectorAll('.aksrt-cardpass-form [data-dep]').forEach(function (el) {
|
||||
// 全文档查找 data-dep 节点:行与提示块各自带状态、各自落 display。
|
||||
// 刻意不做限域(不写 .aksrt-cardpass-form 前缀):提示块一旦被 HTML 解析
|
||||
// 移出表格甚至移出表单子树,限域查找会让它停在初始隐藏状态,表现为「提示不见了」。
|
||||
document.querySelectorAll('[data-dep]').forEach(function (el) {
|
||||
try {
|
||||
var deps = JSON.parse(el.getAttribute('data-dep'));
|
||||
var show = deps.every(function (d) {
|
||||
@@ -1100,9 +1102,9 @@ class PayChargeCards {
|
||||
} catch (e) { /* noop */ }
|
||||
});
|
||||
}
|
||||
document.addEventListener('change', function (e) {
|
||||
if (e.target.closest('.aksrt-cardpass-form')) evalDeps();
|
||||
});
|
||||
// 任何 change 都重新求值:不做「是否属于本表单」的限定,
|
||||
// 因为提示块的祖先链在这种页面上并不保证还挂在表单内。
|
||||
document.addEventListener('change', evalDeps);
|
||||
// 唯一的初始求值入口:本脚本在表单之前输出,此刻解析尚未到达表单,
|
||||
// 直接求值必然取不到任何行(空操作);因此必须等 DOM 就绪后按默认值校正一次。
|
||||
// 服务端已按默认值预隐藏,这里只做兜底校正。
|
||||
|
||||
Reference in New Issue
Block a user