jQuery购物车结算代码

基于jquery库写出来的代码

欢迎指导

html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    
    <style>
    * {
	margin:0;
	padding:0;
}
body {
	font-size:13px;
}
input {
	vertical-align:middle;
}
a {
	text-decoration:none;
	color:#333333;
}
.fl {
	float:left;
}
.fr {
	float:right;
}
.pro-main {
	width:1000px;
	margin:100px auto;
}
.cart-info .all,.cart-info .pro-info,.cart-info .dj-price,.cart-info .num-pro,.cart-info .zj-price,.cart-info .cz {
	float:left;
}
.cart-info {
	height:40px;
	line-height:40px;
	background-color:#EFEFEF;
}
.cart-info .all {
	width:80px;
	padding:0px 15px;
}
.cart-info .all input {
	margin-right:8px;
}
.cart-info .pro-info {
	width:500px;
}
.cart-info .dj-price {
	width:80px;
}
.cart-info .num-pro {
	width:120px;
}
.cart-info .zj-price {
	width:110px;
}
.cart-info .cz {
	width:80px;
}
.cart-main {
	margin-top:15px;
}
.cart-item {
	border:1px solid #EFEFEF;
	padding:15px;
	overflow:hidden;
	margin-bottom:15px;
}
.cart-j {
	width:30px;
}
.pro-item {
	width:560px;
}
.pro-item .pro-img {
	width:80px;
	height:80px;
}
.pro-item .pro-title {
	width:225px;
	line-height:1.8;
	padding:0px 15px;
}
.pro-item .pro-gg {
	width:185px;
	padding:0px 15px;
	font-size:10px;
	color:#666;
}
.price-g {
	width:80px;
	color:black;
	font-weight:bold;
}
.price-num {
	width:95px;
	margin-right:30px;
	background-color:#EFEFEF;
	/* border:1px solid #EFEFEF;
	*/
}
.price-num .increment,.price-num .decrement {
	width:20px;
	float:left;
	text-align:center;
}
.price-num .num {
	float:left;
	width:50px;
	text-align:center;
}
.price-jiner {
	width:110px;
	color:red;
	font-weight:bold;
}
.price-caozuo {
	width:40px;
}
.priceAll {
	margin:0px 20px;
}
.priceAll span {
	padding:0px 8px;
	color:#f22d00;
	font-weight:bold;
	font-size:15px;
}
.spnum em {
	font-style:normal;
	padding:0px 8px;
	color:#f22d00;
	font-weight:bold;
	font-size:15px;
}
.js-btn {
	display:block;
	width:100px;
	text-align:center;
	background-color:#f22d00;
	color:white;
}
.pro-item img {
	width:80px;
}
    
    </style>
    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
    <script src="vue.js"></script>
</head>

<body>
    <div class="pro-main">
    <div class="cart-info">
        <div class="all"><input type="checkbox" class="allCheck">全选</div>
        <div class="pro-info">商品信息</div>
        <div class="dj-price">单价</div>
        <div class="num-pro">数量</div>
        <div class="zj-price">金额</div>
        <div class="cz">操作</div>
    </div>
    <div class="cart-main">
        <div class="cart-item">
            <div class="cart-j fl">
                <input type="checkbox" class="j-check" >
            </div>
            <div class="pro-item fl">
                <div class="pro-img fl"><img src="https://www.jq22.com/img/cs/500x500-1.png" alt=""></div>
                <div class="pro-title fl">西部数据(WD)蓝盘 1TB1</div>
                <div class="pro-gg fl">SATA6Gb/s 7200转64MB 台式机械硬盘(WD10EZEX)</div>
            </div>
            <div class="price-g fl">¥28.60</div>
            <div class="price-num fl">
                <a href="javascript:;" class="increment">+</a>
                <input type="text" value="1" class="num">
                <a href="javascript:;" class="decrement">-</a>
            </div>
            <div class="price-jiner fl">¥28.60</div>
            <div class="price-caozuo fl"><a href="#" class="del-d">删除</a></div>
        </div>
        <div class="cart-item">
            <div class="cart-j fl">
                <input type="checkbox" class="j-check">
            </div>
            <div class="pro-item fl">
                <div class="pro-img fl"><img src="https://www.jq22.com/img/cs/500x500-1.png" alt=""></div>
                <div class="pro-title fl">西部数据(WD)蓝盘 1TB2</div>
                <div class="pro-gg fl">SATA6Gb/s 7200转64MB 台式机械硬盘(WD10EZEX)</div>
            </div>
            <div class="price-g fl">¥28.60</div>
            <div class="price-num fl">
                <a href="javascript:;" class="increment">+</a>
                <input type="text" value="1" class="num">
                <a href="javascript:;" class="decrement">-</a>
            </div>
            <div class="price-jiner fl">¥28.60</div>
            <div class="price-caozuo fl"><a href="javascript:;" class="del-d">删除</a></div>
        </div>
        <div class="cart-item">
            <div class="cart-j fl">
                <input type="checkbox" class="j-check">
            </div>
            <div class="pro-item fl">
                <div class="pro-img fl"><img src="https://www.jq22.com/img/cs/500x500-1.png" alt=""></div>
                <div class="pro-title fl">西部数据(WD)蓝盘 1TB3</div>
                <div class="pro-gg fl">SATA6Gb/s 7200转64MB 台式机械硬盘(WD10EZEX)</div>
            </div>
            <div class="price-g fl">¥28.60</div>
            <div class="price-num fl">
                <a href="javascript:;" class="increment">+</a>
                <input type="text" value="1" class="num">
                <a href="javascript:;" class="decrement">-</a>
            </div>
            <div class="price-jiner fl">¥28.60</div>
            <div class="price-caozuo fl"><a href="javascript:;" class="del-d">删除</a></div>
        </div>
    </div>
    <div class="cart-info">
        <div class="all fl"><input type="checkbox" class="allCheck">全选</div>
        <div class="fl">
            <a href="#" class="clearAll">删除</a>
            <a href="javascirpt:;" class="All-a">清除购物车的宝贝</a>
        </div>
        <div class="fr" style="width: 500px;">
            <div class="spnum fl">
                已选商品<em>0</em></div>
            <div class="priceAll fl">合计(不含运费): <span>0.00</span></div>
            <div class="jiesuan fr"><a href="#" class="js-btn">结算</a></div>
        </div>
    </div>
</div>
</body>
   
</html>
$(function(){
   /* 
    1、全选
        ·单选当点击一行时状态变为选择状态
        ·当全选时所有行状态变为选择状态
        ·当取消全选时选择的行取消选择状态

    2、增加数量
        ·当点击加号时input加一
        
    3、减少数量
        ·当点击减号是input减一
        ·注意!变为0时则删除此行
    4、删除目标信息
        1、点击删除进行删除
        2、根据radio状态删除
        3、点击之后直接全部删除购物车的宝贝
    5、结算
        根据radio状态来结算    
            ·商品有多少件
            shopping_index
            ·合计的金额
            result_money
    */

    //购物车清空的话则为true
    var delete_state = false;
   
    function format(){
        $('.spnum em').text(0);
        $('.priceAll span').text(0.00.toFixed(2));
    }
    //当该元素发生改变则调用次函数
    $(".allCheck").change(function(){
           //如果当前元素的checked为true
         if($(this).prop("checked")){
                
                //将子radio的状态改变成true
                $(".j-check").prop("checked",true) 
                //因为有两个全选则需要把另外一个状态改掉
                $(".allCheck").prop("checked",true)
                getSum()
           }else{ 
            //否则将状态改为false
            $(".j-check").prop("checked",false) 
            $(".allCheck").prop("checked",false)
            //直接重置
            format()

           }
           
       })
    //遍历.j-check里所有的元素
    function delete_item(){
        
        $(".j-check").map(function(index,value){
            //找到cecked为true的元素
            if($(value).prop("checked")){
               //寻找到父级为.cart-item的元素并删除            
               $(value).parents(".cart-item").remove()
               format()
               getSum()
            }
            
        })

        if($(".j-check").length==0){
            if(delete_state){
                alert("别再点啦 已经清除完啦")
                throw new Error("已删除完毕")
            }
            delete_state=true
            
            }
        
    }
    $(".clearAll").click(function(event){
        //阻止页面刷新
        event.preventDefault();
        delete_item()
    })
    //清空宝贝
    $(".All-a").click(function(){
       if(!delete_state){
        format();
      
        $(".cart-main").children().remove();
        
        delete_state = true;
        //遍历.j-check里所有的元素
        }else{
            alert("别再点啦 已经清除完啦")
            throw new Error("已删除完毕")
        }
            
        
        })
    //单个删除
    $(".price-caozuo").click(function(){
        //更新数据在调用getsum
        $(this).siblings(".price-num").children(".num").val(0)
        $(this).siblings(".price-jiner").text("¥" + 0.00.toFixed(2))
        //遍历.j-check里所有的元素
        if($(".cart-item").length==0){
            delete_state=true
            
        }
        getSum();
        //查找该元素父级为.cart-item的元素删除
        $(this).parents(".cart-item").remove()
    })
    
    
    function increment(index,value){
        const num = $($(".num")[index]);//获取num[index]元素
        let  num_number = 1;//数量
        let price_un = $($(".price-g")[index]).text().replace("¥","")//商品单价
        let price_jiner = $($(".price-jiner")[index])//行金额
        var price_row;//暂时存放的行金额
        //判断 class等于decrement的则进入
        if(value.prop("class")=="decrement"){
            //给穿过来的元素绑定点击事件
            value.click(function(){
                //这个一定得加
                //重新获取数量赋值给num_number
                num_number = Number(num.val())
                //减一
                num_number -= 1;
                //一定要注意顺序减了之后再判断
               
                //重新设置金额 金额等于数量乘以单价
                 price_row = Number(price_un) * Number(num_number)
                if(num_number<1){
                    //小于1则删除
                    console.log($(value))
                    
                    //也是其中的一个bug
                    //选择行删除之后金额与件数都不会删减
                    //原因是没有取消radio选中
                    //注意顺序!!
                    //将金额,单价变为0
                    //在调用getsum                    
                    price_jiner.text("¥" + 0.00.toFixed(2))
                    num.prop("value",0);
                    getSum()
                   //这里出现这个bug的原因是删除了这行,你就不能对元素进行更新了,
                   //解决方案将判断放到更新完之后去
                    $(value).parents(".cart-item").remove()
                    
                    
                }
                //重新设置num的value值
                num.prop("value",num_number);
                //调用text函数重新赋值金额
                price_jiner.text("¥" + Math.round(price_row))
                getSum()
                
               
                
            })
            //这里以防万一也是要判断的value.prop("class")=="increment"
            //懒的写了
        }else{
            value.click(function(){
                
                //道理同上
                num_number = Number(num.val())
                num_number += 1;
                price_row = Number(price_un) * Number(num_number)
                num.prop("value",num_number);
                price_jiner.text("¥" + Math.round(price_row))
                getSum()
                
             })
        }
        
        
    }
    //数量加一
    //调用函数
    $(".increment").map(function(index,value){
        increment(index,$(this))

    })
    //数量减一
    //调用函数
    $(".decrement").map(function(index,value){
        increment(index,$(this));
        
    })

    // function result_shopping(value){
        
    //     $(value).click(function(){
    //         let result_m =$(this).parents(".cart-item").children(".price-jiner")
    //         var result_mo = Number($(result_m).text().replace("¥",""))
    //         if($(value).prop("checked")){
    //             shopping_index++
    //             result_money+=result_mo
    //         }else{
    //             shopping_index--
    //             if(shopping_index<0){
    //                 shopping_index=0;
    //                 return -1;
    //             }
    //             result_money-=result_mo
    //         }
    //         $(".priceAll span").text("¥"+result_money.toFixed(2))
    //         $(".spnum em").text(shopping_index)
    //     })
    // }
    // $(".j-check").map(function(index,value){
    //     result_shopping(value)
    // })



    function getSum() {
        // 总数量
        var num = 0;
        // 总价
        var money = 0;
        // 遍历数量
        $('.num').each(function(i, ele) {
           //i:当前元素下标
           //ele:当前元素
           //判断当前元素的父级(.price-num)除自己以外中的元素(.cart-j)下级中的(.j-check)的元素(checked)是否为true
            if ($(this).parent('.price-num').siblings('.cart-j').find('.j-check').prop('checked')) {
               //num=num+ele的value值
                num += parseInt($(ele).val());
                //如果num大于他的长度则吧他的长度返还给num
               if(num >= $(".num").length){
                   num =$(".num").length
               }
                $('.spnum em').text(num);
            }
        });
        //遍历金额
        $('.price-jiner').each(function(i, ele) {
        //如果当前元素除自己以外(.cart-j)下的(.j-check)的元素('checked')为true
            if ($(this).siblings('.cart-j').find('.j-check').prop('checked')) {
                //money = money+解析小数(ele的text值(小数点后面一位))
               
                money += parseFloat($(ele).text().substr(1));
                $('.priceAll span').text(money.toFixed(2));
            }
        })

    }
   
  $(".j-check").click(function(){
      if($(this).prop("checked")){
          
          getSum()
      }else{
        getSum()
        //解决getsum的缺陷
        //问题:当单击radio时出现金额与数量当取消时则不会调用getsum函数
        //为chencked的元素长度等于0的话则表明当前没有为chenched的值了
            if($(".j-check:checked").length == 0){
                
                //格式化
                format()
            }
        
        
      }
      
      
  })
 
  


    
    
    
    
})
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值