fix(payment): 依赖求值改按 name 属性匹配,避免选择器异常静默失效

- formVal 不再把字段名拼进 CSS 选择器:vip_exchange[time] 等含方括号的名称会令选择器抛异常并被 try/catch 吞掉,导致依赖行永久停在初始状态
- 改为 fieldsByName 按 getAttribute('name') 逐元素匹配,radio 选中态也在同一集合内判断
- evalDeps 作用域收窄为 .aksrt-cardpass-form tr[data-dep],避免误命中页面上其他表格的依赖行
This commit is contained in:
2026-09-16 23:03:56 +08:00
parent cb84c88792
commit 282a12a90b
+17 -4
View File
@@ -1043,18 +1043,31 @@ class PayChargeCards {
</style>
<script>
(function () {
// 按 name 属性逐元素匹配,避免把字段名拼进 CSS 选择器:
// 含方括号的字段名(如 vip_exchange[time])会让选择器抛异常并被 catch 吞掉,
// 从而把依赖行永久留在初始状态。
function fieldsByName(key) {
var all = document.querySelectorAll('.aksrt-cardpass-form [name]');
var out = [];
for (var i = 0; i < all.length; i++) {
if (all[i].getAttribute('name') === key) out.push(all[i]);
}
return out;
}
function formVal(key) {
var els = document.querySelectorAll('[name="' + key + '"]');
var els = fieldsByName(key);
if (!els.length) return '';
if (els[0].type === 'radio') {
var c = document.querySelector('[name="' + key + '"]:checked');
return c ? c.value : '';
for (var i = 0; i < els.length; i++) {
if (els[i].checked) return els[i].value;
}
return '';
}
if (els[0].type === 'checkbox') return els[0].checked ? '1' : '';
return els[0].value;
}
function evalDeps() {
document.querySelectorAll('tr[data-dep]').forEach(function (tr) {
document.querySelectorAll('.aksrt-cardpass-form tr[data-dep]').forEach(function (tr) {
try {
var deps = JSON.parse(tr.getAttribute('data-dep'));
var show = deps.every(function (d) {