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

使用jQuery处理循环内商品总价:修改数量时总价串位问题

问题原因
  1. 重复ID冲突:循环中所有商品的总价span都使用了同一个id="toplamFiyat",HTML规范要求ID必须唯一,导致jQuery选择器无法精准定位到当前修改的商品对应的总价元素,会错误更新其他商品的总价。
  2. 逻辑错位:JavaScript中更新的是全局元素#tt,而非当前商品对应的总价span,进一步导致显示混乱。

解决步骤及代码示例

1. 修改后端循环的HTML结构

给每个商品的总价span设置唯一标识,同时用容器包裹商品的总价和数量输入框,方便后续通过相对位置定位元素:

@foreach (var item in Islemler.GetSepet())
{
  <!-- 用容器包裹单个商品的总价和数量输入 -->
  <div class="cart-item">
    <!-- 给总价span设置唯一ID,或用class配合容器定位 -->
    <span id="item-total-@item.ID" class="badge rounded-pill badge-light-success">
    </span>  
    <input onchange="miktar(this)" 
           data-idd="@item.ID" 
           data-price="@item.SatisFiyat1" 
           type="text" 
           class="quantity-counter" 
           value="@item.Miktar" />                
  </div>
}
<!-- 全局总价展示(如果需要保留) -->
<div id="tt">Toplam Fiyat: ₺0.00</div>

2. 修正JavaScript逻辑

精准定位当前商品的总价元素,同时处理非数字输入的异常情况,可选更新全局总价:

function miktar(t) {
    var $input = $(t);
    var itemId = $input.data('idd');
    var unitPrice = parseFloat($input.data('price'));
    // 处理数量输入非数字的情况,默认设为0
    var quantity = parseFloat($input.val()) || 0;

    getValue("/Home/SepetGuncelle",
        { 
          stokID: itemId, 
          StokMiktar: quantity, 
          BirimFiyat: unitPrice 
        },
        function (data, err) {
            // 计算当前商品的总价
            var itemTotal = unitPrice * quantity;
            // 方式1:通过唯一ID定位当前商品的总价span
            $("#item-total-" + itemId).text(
                '₺' + itemTotal.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, "$1,")
            );

            // 方式2:如果不用唯一ID,通过容器相对定位(需把span的class设为item-total)
            // $input.closest('.cart-item').find('.item-total').text(...)

            // 可选:更新全局总价
            var globalTotal = 0;
            $(".quantity-counter").each(function() {
                var price = parseFloat($(this).data('price'));
                var qty = parseFloat($(this).val()) || 0;
                globalTotal += price * qty;
            });
            $("#tt").text(
                "Toplam Fiyat: ₺" + globalTotal.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, "$1,")
            );
        }
    );
}

内容的提问来源于stack exchange,提问作者Ahmet Enes Söylemez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:25:21