You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现两组复选框累加值的求和及同步更新?

实现复选框选中时的双数值实时求和

问题背景

需要实现productAmount.value与localAmount.value的实时求和,这两个数值分别由两组复选框的选中状态计算得出。当前代码只能单独显示其中一个数值,无法同步更新两者的总和。

原有核心代码片段:

// 产品复选框事件末尾
resultSum.value = number_format(parseInt(productAmount.value));

// 本地服务复选框事件末尾
resultSum.value = number_format(parseInt(localAmount.value));

尝试过的单次求和代码:

resultSum.value = parseInt(productAmount.value) + parseInt(localAmount.value);

仅能单次生效,无法随复选框状态变化实时更新总和。


最优解决方案

核心思路是抽离统一的总和计算与更新函数,让两组复选框的点击事件在完成自身数值计算后,都调用该函数更新总和,既保留原有累加逻辑,又实现实时同步。

修改后的完整代码

// 定义统一的总和更新函数
function updateTotalSum() {
  // 用 || 0 处理空值/非数字情况,避免出现NaN
  const productVal = parseInt(productAmount.value) || 0;
  const localVal = parseInt(localAmount.value) || 0;
  resultSum.value = number_format(productVal + localVal);
}

// 产品复选框点击事件
for (let i = 0; i < productChcbx.length; i++) {
    productChcbx[i].addEventListener("click", () => {
        let sum = 0;
        let cnt = 0;
        for (let j = 0; j < productChcbx.length; j++) {
            if (productChcbx[j].checked) {
                cnt++;
                if (cnt == 1) {
                    addProduct.style.display = "flex";
                    productAmount.innerHTML = "70,000원";
                    productAmount.value = 70000;
                } else if (cnt > 1) {
                    sum = 70000 + 60000 * (cnt - 1);
                    productAmount.innerHTML = number_format(sum) + "원";
                    productAmount.value = sum;
                }
            } else if (!productChcbx[j].checked) {
                if (cnt == 0) {
                    addProduct.style.display = "none";
                    productAmount.value = 0;
                }
            }
        }
        // 替换原有单独赋值,调用总和更新函数
        updateTotalSum();
    })
}

// 本地服务复选框点击事件
for (let k = 0; k < localCheckboxs.length; k++) {
    localCheckboxs[k].addEventListener("click", () => {
        let sum = 0;
        let cnt = 0;
        for (let h = 0; h < localCheckboxs.length; h++) {
            if (localCheckboxs[h].checked) {
                cnt++;
                if (cnt == 1) {
                    addLocal.style.display = "flex";
                    localAmount.innerHTML = "150,000원";
                    localAmount.value = 150000;
                } else if (cnt > 1) {
                    sum = 150000 + 100000 * (cnt - 1);
                    localAmount.innerHTML = number_format(sum) + "원";
                    localAmount.value = sum;
                }
            } else if (!localCheckboxs[h].checked) {
                if (cnt == 0) {
                    addLocal.style.display = "none";
                    localAmount.value = 0;
                }
            }
        }
        // 替换原有单独赋值,调用总和更新函数
        updateTotalSum();
    })
}

逻辑说明

  1. updateTotalSum函数负责统一计算两个数值的总和,处理异常值后格式化输出,确保结果始终有效
  2. 两组复选框的点击事件在完成自身的数值计算与DOM更新后,调用该函数触发总和更新
  3. 完全保留原有业务逻辑:产品复选框的70000 + 60000*(n-1)、本地服务复选框的150000 + 100000*(n-1)累加规则

内容的提问来源于stack exchange,提问作者Choi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:20:41