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

在Next.js中如何根据select下拉框的选中选项渲染动态价格?

实现方案

1. 优化逻辑思路

不用硬编码大量if判断,改用配置映射表实现,后续改价格、加段位都不用动逻辑代码,维护成本更低。

2. 新增价格展示节点

先在HTML里加价格展示的区域,样式可自行调整:

<div className="mt-8 text-xl font-bold text-red-500">
  预估价格:<span id="priceShow">0</span> 元
</div>

3. 编写价格计算逻辑

在你的JS代码里加入如下配置和计算函数:

// 段位权重映射,用于计算段位差
const rankWeight = {
  ironn: 0,
  bronze: 4,
  silverr: 8,
  goldd: 12,
  platt: 16,
  diaa: 20
}
// 分段权重映射
const tierWeight = {
  44: 0,
  33: 1,
  22: 2,
  11: 3
}
// 每个小段位的单价,可根据你的实际定价修改
const pricePerTier = 20;

// 价格计算函数
function calcTotalPrice() {
  // 读取当前段位选择值
  const currentRank = document.getElementById('listt').value;
  const currentTier = document.getElementById('tierr').value;
  // 读取目标段位选择值,注意把下面的id替换成你实际目标段位下拉框的id
  const targetRank = document.getElementById('targetRank').value;
  const targetTier = document.getElementById('targetTier').value;

  // 计算当前段位和目标段位的总权重
  const currentTotalWeight = rankWeight[currentRank] + tierWeight[currentTier];
  const targetTotalWeight = rankWeight[targetRank] + tierWeight[targetTier];

  // 目标段位不高于当前段位时价格为0,否则按差值计算总价
  const finalPrice = targetTotalWeight > currentTotalWeight ? (targetTotalWeight - currentTotalWeight) * pricePerTier : 0;
  // 更新页面价格显示
  document.getElementById('priceShow').innerText = finalPrice;
}

4. 绑定事件触发

在你现有的slbz2 onChange事件处理函数里调用价格计算函数即可:

function slbz2() {
  // 你原有切换图片的逻辑保留
  // ...

  // 新增调用价格计算
  calcTotalPrice();
}

自定义定价适配

如果不同大段之间的单价不同(比如Iron升Bronze每小段15元,Bronze升Silver每小段20元),可修改配置表为区间定价即可,不用修改核心逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:00:01