J*aScript动态价格计算器:实现弹窗价格随支付周期调整


javascript动态价格计算器:实现弹窗价格随支付周期调整

本教程详细阐述了如何在J*aScript价格计算器中,根据用户选择的支付周期(按月或按年)动态调整弹窗中显示的价格明细。核心在于修改价格显示函数,使其能获取当前支付类型,并据此对价格进行百分比调整,同时确保在支付周期切换时能实时刷新这些显示。

在构建交互式前端价格计算器时,一个常见的需求是根据用户的选择(例如支付频率:按月或按年)动态调整所有相关的价格显示,包括详细的定价分级(价格阶梯)。本教程将指导您如何修改现有的J*aScript代码,以实现在选择“按月”支付时,弹窗中的价格阶梯自动增加20%,而选择“按年”支付时则保持不变。

1. 理解问题与现有逻辑

原始价格计算器已经能够根据用户选择的支付类型(zahlrythmus,值为 "M" 代表按月,"J" 代表按年)来调整整体计算中使用的百分比(percent 变量)。然而,用于显示价格阶梯的弹窗内容(由 printPreisstaffel 函数生成)并未实时反映这一支付类型的变化,导致弹窗中显示的价格始终是基础年费价格。

要解决此问题,我们需要:

  1. 修改 printPreisstaffel 函数,使其在生成价格显示时考虑当前的支付类型。
  2. 确保当支付类型改变时,调用 printPreisstaffel 函数来更新弹窗内容。

2. 动态调整价格显示逻辑

首先,我们将修改 printPreisstaffel 函数。此函数负责遍历价格阶梯数据并将其渲染到指定的HTML元素中。我们需要在该函数内部获取当前选定的支付类型,并根据其值来计算并显示价格。

function printPreisstaffel(preisstaffel, idelement) {
  document.getElementById(idelement).innerHTML = ""; // 清空现有内容

  // 获取当前选定的支付类型
  var paymenttype = document.querySelector("#zahlrythmus").value;

  for (var key in preisstaffel) {
    var price;
    if (paymenttype === "M") {
      // 如果是按月支付,价格增加20%
      price = (preisstaffel[key] * 1.2).toFixed(2);
    } else {
      // 否则(按年支付),价格保持不变
      price = preisstaffel[key].toFixed(2);
    }
    // 将计算后的价格插入到HTML中
    document.getElementById(idelement).innerHTML += `<div class="price-container"><span class="text">Bis ${key} Benutzer:</span> <span class="value">${price}€ </span></div>`;
  }
}

代码解释:

  • 在循环遍历 preisstaffel 之前,我们通过 document.querySelector("#zahlrythmus").value 获取了用户在下拉菜单中选择的支付类型。
  • 一个 if/else 语句用于判断 paymenttype。
    • 如果 paymenttype 为 "M"(月付),则将原始价格 preisstaffel[key] 乘以 1.2 (即增加20%)。
    • 否则,价格保持不变。
  • toFixed(2) 用于确保价格以两位小数的货币格式显示。
  • 更新后的 price 变量被用于构建最终的HTML字符串。

3. 确保价格显示实时更新

仅仅修改 printPreisstaffel 函数是不够的,因为在用户切换支付类型时,该函数需要被重新调用才能更新弹窗内容。calcSum 函数是处理所有计算和UI更新的中心点,它会在用户更改任何相关输入时被触发(包括支付类型)。

LALAL.AI LALAL.AI

AI人声去除器和声乐提取工具

LALAL.AI 196 查看详情 LALAL.AI

因此,我们需要在 calcSum 函数中,在确定了新的 percent 值之后,重新调用 printPreisstaffel 来刷新App和Backend的价格阶梯显示。

找到 calcSum 函数中以下部分:

  // ... 其他变量定义和百分比计算 ...

  if (paymenttype == "M") {
    percent = 1.2; //standardvalue for monthly
  }else{
    percent = 1;   //standardvalue for annual
  }

  // ... 后端价格计算 ...
  // ... App价格计算 ...

  // 确保在支付类型变更后,重新渲染价格阶梯显示
  printPreisstaffel(pricingapp, "preisstaffelapp"); // 更新App价格阶梯
  if (backendtype == "ZR"){
    printPreisstaffel(pricingbackendzr, "preisstaffelbackend"); // 更新后端(ZR)价格阶梯
  }else{
    printPreisstaffel(pricingbackendz, "preisstaffelbackend"); // 更新后端(Z)价格阶梯
  }  

  // ... 剩余的总和计算和UI更新 ...

代码解释:

  • 我们将 printPreisstaffel(pricingapp, "preisstaffelapp"); 和后端价格阶梯的更新逻辑从 DOMContentLoaded 和 updatePreisStaffelungBackend 中复制并放置到 calcSum 函数中。
  • 重要的是,这些调用必须在 paymenttype 变量已经被正确设置(即 percent 变量确定之后)之后执行,这样 printPreisstaffel 才能获取到正确的支付类型来计算价格。
  • 通过这种方式,每当用户通过下拉菜单更改支付类型时,calcSum 函数都会被触发,从而重新计算所有价格,并最重要的是,重新渲染弹窗中的价格阶梯,使其反映最新的支付条件。

4. 完整的J*aScript代码(关键部分)

为了清晰起见,以下是修改后的 printPreisstaffel 和 calcSum 函数的完整代码片段:

var percent = 1; // Standardvalue for yearly

apppreis = 7.5;
backendpreis = 35;
// Preisstaffelung Zeiterfassung+Rechnungswesen für Backendpreis
var pricingbackendzr = { 4: 35.00, 10: 32.50, 20: 30.00 };
var pricingbackendz = { 4: 20.00, 10: 18.00, 20: 16.00 };
var pricingapp = { 10: 7.50, 25: 7.00, 50: 6.50, 75: 6.00, 500: 5.50 };


document.addEventListener("DOMContentLoaded", function (event) {
  // ... (其他初始化代码,如滑块更新逻辑) ...

  // Initiale Anzeige der Daten
  calcSum(); // 确保初始加载时所有价格都正确显示
  // Initiale Anzeige für Backend Preisstaffel
  // updatePreisStaffelungBackend(); // 此处不再需要单独调用,因为 calcSum 会处理
});

function printPreisstaffel(preisstaffel, idelement) {
  document.getElementById(idelement).innerHTML = "";

  var paymenttype = document.querySelector("#zahlrythmus").value; // 获取支付类型

  for (var key in preisstaffel) {
    var price;
    if (paymenttype === "M") {
      price = (preisstaffel[key] * 1.2).toFixed(2); // 月付增加20%
    } else {
      price = preisstaffel[key].toFixed(2); // 年付保持不变
    }
    document.getElementById(idelement).innerHTML += `<div class="price-container"><span class="text">Bis ${key} Benutzer:</span> <span class="value">${price}€ </span></div>`;
  }
}

// ... (updateUser, calcPercent 函数不变) ...

function updatePreisStaffelungBackend() {
  // 此函数现在仅用于确保在后端功能类型更改时触发 calcSum,
  // 实际的 printPreisstaffel 调用已移至 calcSum
  calcSum();
}


function calcSum() {
  var preisproapp = document.querySelector('.proapp');
  var backendpreissum = document.querySelector('.backendpreissum');
  var appstk = document.querySelector('.appanzahl');
  var preisprobackend = document.querySelector('.probackend');
  var jaehrlich = document.querySelector('.jaehrlichsum');
  var summetext = document.querySelector('.summe');
  var rabatt = document.querySelector('.rabattsum');
  var backendanzahl = document.querySelector(".backenduser").value;
  var appanzahl = document.querySelector(".appuser").value;
  var paymenttype = document.querySelector("#zahlrythmus").value;
  var backendtype = document.querySelector("#backendfunktion").value;

  if (paymenttype == "M") {
    percent = 1.2; // standardvalue for monthly
  } else {
    percent = 1;   // standardvalue for annual
  }

  // If abfrage für Backend um Preisstaffel anzeigen zu lassen
  if (backendtype == "ZR") {
    backendpreis = getPrice(pricingbackendzr, percent, backendanzahl);
  } else {
    backendpreis = getPrice(pricingbackendz, percent, backendanzahl);
  }

  apppreis = getPrice(pricingapp, percent, appanzahl);

  // 重新渲染价格阶梯显示,确保弹窗内容与当前支付类型匹配
  printPreisstaffel(pricingapp, "preisstaffelapp");
  if (backendtype == "ZR") {
    printPreisstaffel(pricingbackendzr, "preisstaffelbackend");
  } else {
    printPreisstaffel(pricingbackendz, "preisstaffelbackend");
  }

  var mytext = (((backendanzahl * backendpreis + +appanzahl * apppreis) * 1)).toFixed(2);
  summetext.textContent = mytext + "€";
  // Rechnung für Backendpreissumme
  var backendpreissumme = (backendanzahl * backendpreis).toFixed(2);
  backendpreissum.textContent = backendpreissumme + "€";
  // Rechnung für Apppreissumme
  var apppreissumme = (appanzahl * apppreis).toFixed(2);
  appstk.textContent = apppreissumme + "€";
  // Rechnung für Preis pro Backendbenutzer
  var probackend2 = ((backendpreis * backendanzahl) / (backendanzahl)).toFixed(2);
  preisprobackend.textContent = probackend2;
  // Rechnung für Preis pro App-Benutzer
  var proapp2 = appanzahl > 0 ? ((apppreis * appanzahl) / (appanzahl)).toFixed(2) : apppreis.toFixed(2);
  preisproapp.textContent = proapp2;
  // If Abfrage wenn "Jaehrlich" ausgewaehlt wird
  if (paymenttype == "J") {
    var jaehrlicherrabatt = ((backendanzahl * backendpreis + +appanzahl * apppreis) * 12).toFixed(2);
    jaehrlich.textContent = jaehrlicherrabatt + "€";
  }
  // Rechnung für Ersparnis
  var rabattsum = (jaehrlicherrabatt * 0.2).toFixed(2); // 这里可能需要根据实际业务逻辑调整,原始代码有误
  rabatt.textContent = "-" + rabattsum + "€";

}
// ... (checkHide, getPrice 函数不变) ...

注意事项:

  • 初始加载: 确保在 DOMContentLoaded 事件中调用 calcSum(),这样页面加载时所有价格(包括弹窗中的)都能正确初始化。
  • updatePreisStaffelungBackend 调整: 原始代码中 updatePreisStaffelungBackend 也调用了 printPreisstaffel。为了避免重复逻辑和确保一致性,建议让 updatePreisStaffelungBackend 只负责触发 calcSum(),而 calcSum() 负责所有价格的计算和UI更新。
  • 货币格式: toFixed(2) 在显示货币时非常有用,但请注意它返回的是字符串。如果您需要对价格进行进一步的数学运算,请确保将其转换回数字类型。
  • 代码组织: 将所有UI更新逻辑集中在 calcSum 这样的一个核心函数中,有助于提高代码的可维护性和可读性。

总结

通过以上修改,您的J*aScript价格计算器将能够根据用户选择的支付周期(按月或按年)动态地调整弹窗中显示的价格阶梯。关键在于在 printPreisstaffel 函数中引入支付类型的判断逻辑,并在 calcSum 函数中确保每次支付类型变化时都重新调用 printPreisstaffel 来刷新UI。这种方法保证了用户界面的实时性和准确性,提升了用户体验。

以上就是J*aScript动态价格计算器:实现弹窗价格随支付周期调整的详细内容,更多请关注其它相关文章!


# 窗内  # 枣庄互联网seo公司  # 深圳怎么做seo  # 网易推广营销模式  # 不需要网站推广的app  # 农业种植技术推广网站  # 苏州网站建设接单  # 惠州商城网站推广建设  # 网站推广能干啥用啊知乎  # 重庆seo全网营销  # 网店推广营销方案表  # 您的  # 加载  # 遍历  # javascript  # 的是  # 使其  # 窗中  # 按年  # 按月  #   # html元素  # ai  # 后端  # app  # 前端  # html  # java 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 消除网页顶部意外空白线:CSS布局常见问题与解决方案  解决jQuery多计算器输入字段冲突的教程  J*aScript模拟悬停与点击:自动化网页动态元素交互指南  中通快递官网指定查询 中通快递单号查询平台入口  DeepSeek超全面指南:入门必看  优化2xN网格最大路径和的动态规划算法实践  在Django中动态检查模型关联:一种灵活的解决方案  Win11怎么设置分辨率 Win11显示设置调整分辨率及刷新率修改  如何快速去除厨房重油污? 2025年最好用的厨房清洁剂推荐  J*aScript大数运算_BigInt使用指南  sublime怎么快速在浏览器中预览HTML_sublime配置View in Browser教程  iPhone14无法连接蓝牙设备如何解决  Highcharts雷达图径向轴数值标签实现教程  《小黑盒》删除历史浏览方法  多闪APP官方下载安装入口_多闪最新版本获取入口  构建可配置的J*aScript加权点击计数器与共享总计功能  电脑桌面图标怎么变大变小_Windows个性化设置第一课【新手入门】  抖音手机分身两个账号怎么切换?分身两个系统是一样的吗?  大熊猫抓取竹子的“大拇指”其实是什么?蚂蚁庄园课堂今天答案最新11月30日  在PySimpleGUI中实现键盘按键绑定按钮事件  如何查询国外邮政编码_国外邮政编码查询的多种有效途径  PPT页面尺寸怎么修改 PPT自定义幻灯片大小与方向设置【教程】  Python中深度嵌套字典与列表的数据提取与条件过滤指南  在J*a里什么是行为抽象_抽象行为对代码复用的提升作用  《淘票票》添加到苹果钱包教程  汽水音乐在线听歌网页版 汽水音乐在线听歌网页版入口  iPhone 13 mini如何清理Safari缓存_iPhone 13 mini浏览器缓存清理方法  抖音号显示企业机构号是什么意思?企业机构号申请条件是什么?  驱动人生:游戏修复指南  《随手记》备份数据方法  快手极速版在线体验区 快手极速版网页体验入口  LocoySpider如何批量采集电商商品_LocoySpider电商采集的模板应用  123网页端官方登录页 123邮箱网页版即时通讯服务  《虎扑》取消评分记录方法  悟空浏览器如何恢复关闭的标签页 悟空浏览器撤销关闭网页快捷键设置  Selenium自动化:利用键盘模拟解决复杂日期输入框输入问题  哔哩哔哩在线观看入口 B站官网免费进入  b站怎么用微信登录_b站微信登录方法  如何修改Windows截图的默认保存位置_告别C盘让桌面更整洁【教程】  《原神》月之一版本新增书籍一览  网站体验不好=浪费钱:如何提升-用户体验效果差  使用 .htaccess 正确配置 WordPress 子目录重定向与路径保留  拷贝漫画2025网页版入口 拷贝漫画官网免费看全集  yy漫画官方网站登录入口_yy漫画在线阅读页面地址  《爱南宁》认证电动车方法  银信通自动开通原因揭秘  修复UI元素交互障碍:从“开始”按钮到信息框的平滑过渡实现  利用Flexbox实现图片元素的二维布局:2x2网格排列指南  Mac怎么关闭按键声音_Mac键盘打字音效设置  VB表达式书写规则解析 

 2025-11-11

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.