我正在try 为现有的订餐系统构建购物车功能.

在那里,用户可以查看产品价格

<div class="product__price m-t-5">
  <span class="product__price product__price--large">$@Html.DisplayFor(model => model.ProductPrice)</span>
</div>

一节.

如果所选产品是可定制的,我会在带有复选框的视图中显示额外的项目.

所以我想知道的是,如果顾客 Select 了任何额外的商品,额外的商品价格应该加到主价上.

此外,如果客户未勾选,则应从主要金额中减go .

想知道如何使用Java脚本实现这一点吗?

这是HTML码.

  <div class="col-md-7">
   <div class="product-details-box m-b-60">
     <h4 class="font--regular m-b-20">@Html.DisplayFor(model => model.ProductName)</h4>
     <div class="product__price m-t-5">
       <span class="product__price product__price--large">$@Html.DisplayFor(model => model.ProductPrice)</span>
     </div>
     <div class="product-var p-tb-30">
       <div class="product-quantity product-var__item d-flex align-items-center">
         <span class="product-var__text">Quantity: </span>
         <form class="quantity-scale m-l-20">
           <div class="value-button" id="decrease" onclick="decreaseValue()">-</div>
           <input type="number" id="number" name="number" value="1" />
           <div class="value-button" id="increase" onclick="increaseValue()">+</div>
         </form>
       </div>
       <div>
         <h4 class="font--regular m-b-20">Add Some Extra</h4> 
         @if (Model.CustomizableFoods.Count!=0) 
         { 
         foreach (var item in Model.CustomizableFoods)
         { 
         <div class="row">
           <ul class="list">
             <li class="list__item">
               <label class="label--checkbox">
                 <input type="checkbox" class="checkbox"> &nbsp; &nbsp; &nbsp; @item.ExtraItem - @item.Extra_Item_Price </label>
             </li>
           </ul>
         </div>
            } 
        }
       </div>
       <div class="product-var__item">
         <input class="btn btn--long btn--radius-tiny btn--green btn--green-hover-black btn--uppercase btn--weight m-r-20" type="submit" value="Add to cart" />
         <a href="wishlist.html" class="btn btn--round btn--round-size-small btn--green btn--green-hover-black">
           <i class="fas fa-heart"></i>
         </a>
       </div>
       <div class="product-var__item">
         <span class="product-var__text">Guaranteed safe checkout </span>
       </div>
       <div class="product-var__item d-flex align-items-center">
         <span class="product-var__text">Share: </span>
         <ul class="product-social m-l-20">
           <li>
             <a href="#">
               <i class="fab fa-facebook-f"></i>
             </a>
           </li>
           <li>
             <a href="#">
               <i class="fab fa-twitter"></i>
             </a>
           </li>
           <li>
             <a href="#">
               <i class="fab fa-pinterest-p"></i>
             </a>
           </li>
         </ul>
       </div>
     </div>
   </div>
 </div>

这是一个视图的样本,

enter image description here

这是我做的,

在视图中

 @if (Model.CustomizableFoods.Count!=0) 
 { 
    foreach (var item in Model.CustomizableFoods) 
     {  
     <div class="row">
        <ul class="list">
            <li class="list__item">
                <label class="label--checkbox">
                    <input type="checkbox" class="checkbox" onclick="thisChecked()" value="@item.Extra_Item_Price"> &nbsp; &nbsp; &nbsp; @item.ExtraItem - @item.Extra_Item_Price </label>
            </li>
        </ul>
      </div> 
    } 
 }

在 playbook 中

< script >
  function thisChecked() {

    var sList = "";
    $('input[type=checkbox]').each(function () {
      sList += "(" + $(this).val() + "-" + (this.checked ? "checked" : "not checked") + ")";
    });

    alert(sList);

  } <
  /script>

因此,alert 显示

(100.00-checked)(450.00-not checked)

那么,有没有办法只将选定的值传递给一个变量,然后判断或不判断另一个变量呢?

推荐答案

你可以使用数据属性,它将具有产品的原始数量,并使用它,您可以增加或减少thisChecked个函数内的额外项目

此外,请确保在调用decreaseValue / increaseValue个函数时应始终更新属性值.

100:

function thisChecked(el) {

  var closest_price_element = $(el).closest('.product-details-box').find('span.product__price');
  var amount = parseFloat(closest_price_element.data('original')) ?? 0; //getting attr value ..
  $('.product-var input[type=checkbox]:checked').each(function() {
    amount += parseFloat($(this).val()); //loop and addiing items amt
  });

  closest_price_element.text('$' + amount); //change value of price

}

//***the data-attr should be updated..always..not sure about decreaseValue / increaseValue fn there also you need to update the data attr value so that it always take original amount .!!
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="col-md-7">
  <div class="product-details-box m-b-60">
    <h4 class="font--regular m-b-20">PIZZA</h4>
    <div class="product__price m-t-5">
      <!--here added orginal price in data attr data-original= '@model.ProductPrice' -->
      <span class="product__price product__price--large" data-original='1200'>$1200</span>
    </div>
    <div class="product-var p-tb-30">
      <div class="product-quantity product-var__item d-flex align-items-center">
        <span class="product-var__text">Quantity: </span>
        <form class="quantity-scale m-l-20">
          <div class="value-button" id="decrease" onclick="decreaseValue()">-</div>
          <input type="number" id="number" name="number" value="1" />
          <div class="value-button" id="increase" onclick="increaseValue()">+</div>
        </form>
      </div>
      <div>
        <h4 class="font--regular m-b-20">Add Some Extra</h4>

        <div class="row">
          <ul class="list">
            <li class="list__item">
              <label class="label--checkbox">
              <!--pass current element reference-->
                 <input type="checkbox" class="checkbox" onclick="thisChecked(this)" value="10"> &nbsp; &nbsp; &nbsp; Cheese - 10  </label>
            </li>
          </ul>
        </div>
        <div class="row">
          <ul class="list">
            <li class="list__item">
              <label class="label--checkbox">
                 <input type="checkbox" class="checkbox" onclick="thisChecked(this)" value="100"> &nbsp; &nbsp; &nbsp; XYZ - 100 </label>
            </li>
          </ul>
        </div>

      </div>

    </div>
  </div>
</div>

Javascript相关问答推荐

如何才能获取API的所有19页,而不是仅获取我已经编写的代码中的第一页?

使用jsPDF添加Image JPEG将p5.js草图画布下载为PDF

使用Element.children在前后移动 node

在Phaser中查找哪个物体处于碰撞中

为什么这个自定义组件会被放置在TR之外?

JavaScript:循环访问不断变化的数组中的元素

React对话框模式在用户单击预期按钮之前出现

不渲染具有HTML参数的React元素

深嵌套的ng-container元素仍然可以在Angular 布局组件中正确渲染内容吗?

Google maps API通过API返回ZERO_RESULTS,以获得方向请求,但适用于Google maps

v—自动完成不显示 Select 列表中的所有项目

在open shadow—root中匹配时,使用jQuery删除一个封闭的div类

如何将数据块添加到d3力有向图中?

检索相加到点的子项

MarkLogic-earch.suggest不返回任何值

SPAN不会在点击时关闭模式,尽管它们可以发送日志(log)等

当代码另有说明时,随机放置的圆圈有时会从画布上消失

如何在Press上重新启动EXPO-AV视频?

OnClick更改Json数组JSX中的图像源

Node.js API-queryAll()中的MarkLogic数据移动