jquery模仿淘宝购物车结算页面代码(多店铺全选及价格计算)

小精豆2016
小精豆2016 发布于 2016-01-14 18:38:29 浏览:4211 类型:原创 - 教程 分类:JavaScript - jquery功能开发 二维码: 作者原创 版权保护
前端菜鸟一枚,之前一直做美工的工作,今年开始才专职做前端,这几天刚好工作需要写一个购物车结算的页面,下面把代码分享出来,希望大家能多多指导
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>购物车结算</title>
  <meta name="description" content="">
  <meta name="keywords" content="">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
  <meta name="format-detection" content="telephone=no" />
  <meta name="renderer" content="webkit">
  <!--<![endif]-->
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black">
  <style>
  .shop-total,
  .all-total {
    height: 50px;
    line-height: 50px;
    font-weight: bold;
    color: #f00;
    float: left;
  }
  
  .one-shop,
  .all-total,
  .shop-total {
    width: 400px;
  }
  
  p {
    margin: 0;
  }
  
  .goods-check {
    width: 25px;
    height: 25px;
    margin-top: 5px;
  }
  
  .goods-msg,
  p,
  label {
    float: left;
  }
  </style>
</head>

<body>
  <!-- 一个店铺 -->
  <div class="one-shop">
    <!-- 一个商品 -->
    <div class="one-goods">
      <div class="goods-msg">
        <label for="">
          <input type="checkbox" class="goods-check GoodsCheck">
        </label>
        <button type="button" class="minus">-</button>
        <input type="text" class="am-num-text" value="1" />
        <button type="button" class="plus">+</button>
      </div>
      <p>商品单价:¥<span class="shop-total-amount GoodsPrice">20.00</span></p>
    </div>
    <!-- 一个商品 -->
    <div class="one-goods">
      <div class="goods-msg">
        <label for="">
          <input type="checkbox" class="goods-check GoodsCheck">
        </label>
        <button type="button" class="minus">-</button>
        <input type="text" class="am-num-text" value="1" />
        <button type="button" class="plus">+</button>
      </div>
      <p>商品单价:¥<span class="shop-total-amount GoodsPrice">9.90</span></p>
    </div>
    <!-- 一个商品 -->
    <div class="one-goods">
      <div class="goods-msg ">
        <label for="">
          <input type="checkbox" class="goods-check GoodsCheck">
        </label>
        <button type="button" class="minus">-</button>
        <input type="text" class="am-num-text" value="1" />
        <button type="button" class="plus">+</button>
      </div>
      <p>商品单价:¥<span class="shop-total-amount GoodsPrice">10.00</span></p>
    </div>
    <!-- 店铺合计 -->
    <div class="shop-total">
      <label for="">
        <input type="checkbox" class="goods-check ShopCheck">店铺全选&nbsp;&nbsp;&nbsp;&nbsp;</label>
      <p>本店合计:¥<span class="shop-total-amount ShopTotal">0</span></p>
    </div>
  </div>
  <!-- 一个店铺 -->
  <div class="one-shop">
    <!-- 一个商品 -->
    <div class="one-goods">
      <div class="goods-msg">
        <label for="">
          <input type="checkbox" class="goods-check GoodsCheck">
        </label>
        <button type="button" class="minus">-</button>
        <input type="text" class="am-num-text" value="1" />
        <button type="button" class="plus">+</button>
      </div>
      <p>商品单价:¥<span class="shop-total-amount GoodsPrice">30.00</span></p>
    </div>
    <!-- 一个商品 -->
    <div class="one-goods">
      <div class="goods-msg">
        <label for="">
          <input type="checkbox" class="goods-check GoodsCheck">
        </label>
        <button type="button" class="minus">-</button>
        <input type="text" class="am-num-text" value="1" />
        <button type="button" class="plus">+</button>
      </div>
      <p>商品单价:¥<span class="shop-total-amount GoodsPrice">20.00</span></p>
    </div>
    <!-- 店铺合计 -->
    <div class="shop-total">
      <label for="">
        <input type="checkbox" class="goods-check ShopCheck">店铺全选&nbsp;&nbsp;&nbsp;&nbsp;</label>
      <p>本店合计:¥<span class="shop-total-amount ShopTotal">0</span></p>
    </div>
  </div>
  <!-- 总计 -->
  <div class="all-total">
    <label for="">
      <input type="checkbox" class="goods-check" id="AllCheck">全选&nbsp;&nbsp;&nbsp;&nbsp;</label>
    <p>总价合计:¥<span class="shop-total-amount" id="AllTotal">0</span></p>
  </div>
  <script src="http://code.jquery.com/jquery-2.2.0.min.js"></script>
  <script>
  // 数量减
  $(".minus").click(function() {
    var t = $(this).parent().find('.am-num-text');
    t.val(parseInt(t.val()) - 1);
    if (t.val() <= 1) {
      t.val(1);
    }
    TotalPrice();
  });
  // 数量加
  $(".plus").click(function() {
    var t = $(this).parent().find('.am-num-text');
    t.val(parseInt(t.val()) + 1);
    if (t.val() <= 1) {
      t.val(1);
    }
    TotalPrice();
  });
  // 点击商品按钮
  $(".GoodsCheck").click(function() {
    var goods = $(this).closest(".one-shop").find(".GoodsCheck"); //获取本店铺的所有商品
    var goodsC = $(this).closest(".one-shop").find(".GoodsCheck:checked"); //获取本店铺所有被选中的商品
    var Shops = $(this).closest(".one-shop").find(".ShopCheck"); //获取本店铺的全选按钮
    if (goods.length == goodsC.length) { //如果选中的商品等于所有商品
      Shops.prop('checked', true); //店铺全选按钮被选中
      if ($(".ShopCheck").length == $(".ShopCheck:checked").length) { //如果店铺被选中的数量等于所有店铺的数量
        $("#AllCheck").prop('checked', true); //全选按钮被选中
        TotalPrice();
      } else {
        $("#AllCheck").prop('checked', false); //else全选按钮不被选中 
        TotalPrice();
      }
    } else { //如果选中的商品不等于所有商品
      Shops.prop('checked', false); //店铺全选按钮不被选中
      $("#AllCheck").prop('checked', false); //全选按钮也不被选中
      // 计算
      TotalPrice();
      // 计算
    }
  });
  // 点击店铺按钮
  $(".ShopCheck").change(function() {
    if ($(this).prop("checked") == true) { //如果店铺按钮被选中
      $(this).parents(".one-shop").find(".goods-check").prop('checked', true); //店铺内的所有商品按钮也被选中
      if ($(".ShopCheck").length == $(".ShopCheck:checked").length) { //如果店铺被选中的数量等于所有店铺的数量
        $("#AllCheck").prop('checked', true); //全选按钮被选中
        TotalPrice();
      } else {
        $("#AllCheck").prop('checked', false); //else全选按钮不被选中
        TotalPrice();
      }
    } else { //如果店铺按钮不被选中
      $(this).parents(".one-shop").find(".goods-check").prop('checked', false); //店铺内的所有商品也不被全选
      $("#AllCheck").prop('checked', false); //全选按钮也不被选中
      TotalPrice();
    }
  });
  // 点击全选按钮
  $("#AllCheck").click(function() {
    if ($(this).prop("checked") == true) { //如果全选按钮被选中
      $(".goods-check").prop('checked', true); //所有按钮都被选中
      TotalPrice();
    } else {
      $(".goods-check").prop('checked', false); //else所有按钮不全选
      TotalPrice();
    }
    $(".ShopCheck").change(); //执行店铺全选的操作
  });

  function TotalPrice() {
    var allprice = 0; //总价
    $(".one-shop").each(function() { //循环每个店铺
      var oprice = 0; //店铺总价
      $(this).find(".GoodsCheck").each(function() { //循环店铺里面的商品
        if ($(this).is(":checked")) { //如果该商品被选中
          var num = parseInt($(this).parents(".one-goods").find(".am-num-text").val()); //得到商品的数量
          var price = parseFloat($(this).parents(".one-goods").find(".GoodsPrice").text()); //得到商品的单价
          var total = price * num; //计算单个商品的总价
          oprice += total; //计算该店铺的总价
        }
        $(this).closest(".one-shop").find(".ShopTotal").text(oprice.toFixed(2)); //显示被选中商品的店铺总价
      });
      var oneprice = parseFloat($(this).find(".ShopTotal").text()); //得到每个店铺的总价
      allprice += oneprice; //计算所有店铺的总价
    });
    $("#AllTotal").text(allprice.toFixed(2)); //输出全部总价
  }
  </script>
</body>

</html>
z
给个赞 6 人点赞
收藏 14 人收藏
评论 已有 5 条评论;以下用户言论只代表其个人观点,不代表 前端网(QDFuns) 的观点或立场。
登录 以后才能发表评论
最新评论
小精豆2016
小精豆20167 天前5F
这个项目写了很久了,其实这些计算在前端写出来没什么意义的,所有的计算都要和数据库同步才行,所以这个地方最好还是后端去写 //@741328052emoticon能不能计算出每个店铺的数量
举报 支持 (0) 回复 (0)
741328052
7413280522016-12-26 16:20:404F
emoticon能不能计算出每个店铺的数量
举报 支持 (0) 回复 (1)
misscheng
misscheng2016-12-21 15:53:143F
详细的写清楚了,每句代码的意思,很清晰,很佩服你,至于楼下的小伙伴,自己阅读每一句代码,就知道怎么写了 //@小精豆2016:那我试试吧,写了好久的代码了,需要好好整理下思路 //@liusong135:你好,因为我对jQuery不熟,所以你能不能对你的代码再增加一个操作:计算出每件商品随数量变化后的总价,最开始这个总价就是该商品的单价。我尝试加了很多次都没成功,还麻烦你帮忙一下,非常感谢!!!
举报 支持 (0) 回复 (0)
小精豆2016
小精豆20162016-09-28 17:16:532F
那我试试吧,写了好久的代码了,需要好好整理下思路 //@liusong135:你好,因为我对jQuery不熟,所以你能不能对你的代码再增加一个操作:计算出每件商品随数量变化后的总价,最开始这个总价就是该商品的单价。我尝试加了很多次都没成功,还麻烦你帮忙一下,非常感谢!!!
举报 支持 (0) 回复 (1)
liusong135
liusong1352016-09-13 09:57:111F
你好,因为我对jQuery不熟,所以你能不能对你的代码再增加一个操作:计算出每件商品随数量变化后的总价,最开始这个总价就是该商品的单价。我尝试加了很多次都没成功,还麻烦你帮忙一下,非常感谢!!!
举报 支持 (0) 回复 (1)
小精豆2016 小精豆2016 作者

作者最新