使用jQuery each函数计算商品总金额失败,请求技术协助
修复jQuery计算购物车总金额的问题
我帮你排查了代码里的几个关键问题,现在给你修正后的方案:
问题分析
你的代码主要有3个核心问题导致计算失败:
subamount变量没有初始化,默认是undefined,和数字相乘后会变成NaN(非数字)- 从
data-*属性获取的是字符串类型,直接相乘会触发字符串拼接而非数值计算 - 当前逻辑只更新了
.item1的数量,但循环所有.cart_items,如果是多商品场景,这个关联逻辑不对
修正后的代码
$('.qty_value').on('change', function(){ // 初始化总金额为0,避免NaN问题 let subamount = 0; // 把输入的数量转成整数,确保是数值类型 const new_qty = parseInt($(this).val(), 10); // 若要支持多商品,建议给输入框和商品项加对应标识(比如data-item-id) // 这里先兼容你原有的单商品逻辑,若有多商品可替换为关联匹配的写法 $('.item1').attr('data-order-qty', new_qty); // 遍历所有商品计算总金额 $('.cart_items').each(function(){ // 将data属性的字符串转成数值,价格用parseFloat处理小数 const sqty = parseInt($(this).attr('data-order-qty'), 10); const samt = parseFloat($(this).attr('data-order-price')); // 只在数值有效时累加,避免无效值干扰计算 if (!isNaN(sqty) && !isNaN(samt)) { subamount += samt * sqty; } }); // 保留两位小数显示更符合金额场景 alert(`总金额:${subamount.toFixed(2)}`); });
额外优化建议
- 给数量输入框添加
min="1"属性,避免输入0或负数这类无效值 - 用jQuery的
data()方法替代attr()获取data属性,它会自动尝试转换数据类型:$(this).data('order-qty') - 如果是多商品购物车,建议给每个数量输入框和对应的商品项添加相同的
data-item-id属性,确保数量修改能精准对应到目标商品,比如:<input type="number" class="qty_value" data-item-id="1" value="1"> <div class="cart_items item1" data-item-id="1" data-order-qty="1" data-order-price="99.99">商品1</div>
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

