如何使用jQuery将选中单选按钮值累加到用户输入计算总和
拍品金额计算器功能补全方案
你原代码中通过radio的change事件获取竞价服务费的思路是可行的,只需要补全逻辑、抽离公共计算方法即可实现需求,具体实现如下:
核心优化逻辑
- 移除radio事件中冗余的多分支if判断,直接读取选中项的value转为数值即可,后续新增竞价档位无需修改JS逻辑
- 将金额计算、字段渲染逻辑抽为独立公共函数,拍品金额输入、竞价方式切换两个操作都调用该函数,避免重复代码,保证数据实时同步
- 初始化时读取默认选中的radio服务费值,避免初始状态下费用变量为空导致计算错误
- 补充直播服务费字段渲染、服务费累加进总价的逻辑
- 输入框新增
input事件监听,兼容鼠标粘贴、点击数字控件调值的场景,更新更及时
修正后完整JS代码
$(document).ready(function() { // 初始化读取默认选中的竞价方式服务费 let biddingFee = parseFloat($('input[type=radio][name=group1]:checked').val()); const $lotValue = $("#lotValue"), $totalBid = $("#totalBid"), $buyersPremium = $("#buyersPremium"), $liveBiddingFee = $("#liveBiddingFee"); // 统一计算与渲染函数 function updateTotal() { const lotValue = parseFloat($lotValue.val()); // 输入非法值时隐藏所有结果 if (isNaN(lotValue)) { $buyersPremium.hide(); $liveBiddingFee.hide(); $totalBid.hide(); return; } // 各部分金额计算 const premiumVal = lotValue * 0.24; const finalPrice = lotValue + premiumVal + biddingFee; // 渲染所有展示字段 $('.line').hide(); $buyersPremium.fadeIn().find(".buyersPremiumNumber").text(premiumVal.toFixed(2)); $liveBiddingFee.fadeIn().find("#price").text(biddingFee.toFixed(2)); $totalBid.fadeIn().find(".totalBidNumber").text(finalPrice.toFixed(2)); } // 竞价方式切换事件 $('input[type=radio][name=group1]').change(function() { biddingFee = parseFloat(this.value); updateTotal(); }); // 拍品金额输入事件 $lotValue.on('input keyup', function(e) { if (e.which === 13) return; updateTotal(); }); // 页面加载时自动触发一次计算,适配输入框带默认值的场景 updateTotal(); });
HTML说明
原有HTML结构无需调整,可直接配合上述JS运行,最终总价计算规则为:
最终支付金额 = 拍品输入价值 + 拍品价值24%买家溢价 + 所选竞价方式对应直播服务费*
内容的提问来源于stack exchange,提问作者threeedv
相关产品推荐
相关产品推荐

