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:
1 parent
cb84c88792
commit
282a12a90b
1 file changed
+17
-4
@@ -1043,18 +1043,31 @@ class PayChargeCards {
|
|||||||
</style>
|
</style>
|
||||||
<script>
|
<script>
|
||||||
(function () {
|
(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) {
|
function formVal(key) {
|
||||||
var els = document.querySelectorAll('[name="' + key + '"]');
|
var els = fieldsByName(key);
|
||||||
if (!els.length) return '';
|
if (!els.length) return '';
|
||||||
if (els[0].type === 'radio') {
|
if (els[0].type === 'radio') {
|
||||||
var c = document.querySelector('[name="' + key + '"]:checked');
|
for (var i = 0; i < els.length; i++) {
|
||||||
return c ? c.value : '';
|
if (els[i].checked) return els[i].value;
|
||||||
|
}
|
||||||
|
return '';
|
||||||
}
|
}
|
||||||
if (els[0].type === 'checkbox') return els[0].checked ? '1' : '';
|
if (els[0].type === 'checkbox') return els[0].checked ? '1' : '';
|
||||||
return els[0].value;
|
return els[0].value;
|
||||||
}
|
}
|
||||||
function evalDeps() {
|
function evalDeps() {
|
||||||
document.querySelectorAll('tr[data-dep]').forEach(function (tr) {
|
document.querySelectorAll('.aksrt-cardpass-form tr[data-dep]').forEach(function (tr) {
|
||||||
try {
|
try {
|
||||||
var deps = JSON.parse(tr.getAttribute('data-dep'));
|
var deps = JSON.parse(tr.getAttribute('data-dep'));
|
||||||
var show = deps.every(function (d) {
|
var show = deps.every(function (d) {
|
||||||
|
|||||||
Reference in new issue
Block a user