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

JavaScript实现将类构造器选中信息展示到HTML表格

修正后的可运行代码

你遇到的问题核心是没有给每个选中项单独生成表格行、选中值和实例匹配逻辑错误、局部变量作用域冲突。以下是修改后的完整JavaScript代码:

/* 新增/删除选项、查看选项和价格汇总 */
// 变量声明
let button = document.getElementById("submit");
let choice = document.getElementById("choice");
let totalPriceEl = document.getElementById("totalPrice");

// 配置项构造类
class CarOptions {
    constructor(optionName, price) {
        this.optionName = optionName;
        this.price = price;
    }
}
// 生成6个配置实例
let option = new CarOptions("", 0);
let vac = new CarOptions("vac", 150);
let trunk = new CarOptions("trunk", 2000);
let seat = new CarOptions("seat", 550);
let night = new CarOptions("night", 360);
let wifi = new CarOptions("wifi", 1200);
let park = new CarOptions("park", 600);
// 所有配置实例集合
let allOptions = [option, vac, trunk, seat, night, wifi, park];

// 提交事件监听
button.addEventListener("click", (e) => {
    e.preventDefault();
    // 清空之前的选中记录,仅保留表头和总计行
    document.querySelectorAll('.results tr:not(:first-child):not(:last-child)').forEach(row => row.remove());
    let total = 0;
    // 获取选中的配置值,过滤掉空选项
    const selectedValues = Array.from(document.querySelectorAll('#choice option:checked'))
        .map(el => el.value)
        .filter(val => val !== '');
    // 遍历选中值,匹配对应实例并渲染
    selectedValues.forEach(val => {
        const matchedOption = allOptions.find(opt => opt.optionName === val);
        if(matchedOption) {
            display(matchedOption);
            total += matchedOption.price;
        }
    })
    // 填充总价
    totalPriceEl.innerText = total;
})

function display(optionObj) {
    // 为每个选中配置生成独立的表格行
    const newRow = document.createElement('tr');
    const nameCell = document.createElement('td');
    const priceCell = document.createElement('td');
    nameCell.innerText = optionObj.optionName;
    priceCell.innerText = optionObj.price;
    newRow.appendChild(nameCell);
    newRow.appendChild(priceCell);
    // 插入到总计行之前
    document.querySelector('.results').insertBefore(newRow, totalPriceEl.parentNode);
}

修改说明

  • 删除了冗余的allOptionsName数组,直接通过实例数组匹配选中值,避免数据维护不一致
  • 每次提交先清空历史渲染的选项行,避免重复展示
  • 每个选中配置单独生成表格行,不会全部挤在同一行
  • 修复了原代码中局部变量作用域错误、display函数参数传递失效的问题
  • 完全通过类实例的属性填充表格,符合你不直接使用表单原始值的要求
  • 新增了总价自动计算逻辑,自动累加所有选中配置的价格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:48:03