使用原生 "js" 计算购物车 商品及会员总价

关于购物车,想必在网上购物过的小哥哥小姐姐们都都很清楚,这里就不瞎扯淡了,嘿嘿!

回顾一下上一次的文章是写的怎么实现购物车,比较宏观的描述了一下实现过程!

这次讲解一下里面的功能,一步一步去实现,总不能一口吃个大胖子是吧!

进入正题:使用原生 “js“ 计算购物车 商品及会员总价

  • 首先看一下图要实现什么样的功能!
  1. 动态计算商选中的商品数量
  2. 数量的加减操作框
  3. 选中商品计算商品总价 与 会员总价
  4. 删除选中的商品

  • 下面看实现原理:
  1. 动态计算商选中的商品数量:使用下面这端代码判断是否选中,将其选中的数量用 length 拿到赋值给标签就好了
    var proNmCheck = $('input[name="boxPid"]:checked');
    $("你自己的商品数量标签").html(proNmCheck.length);

     

  2.  数量加减操作:很简单,直接写个操作数量的接口,将其 value 传入即可,方法太多,自己琢磨
  3.  动态计算总价:这里有两个价,一个商品总价,一个会员价,其实都一样不难,只要在 checkbox  中放入 商品价格、会员价格及数量就行,但要怎么放呢?当然是用 $( ).attr( )啦!然后使用$( ).each(function(index, value){}方法将其放入的属性值循环出来在计算便可,还不懂吗?看下面代码!在不懂,那可以看后面源码!在不懂,那我就没办法了,来问我吧!嘻嘻
    $("[name=boxPid]:checked").each(function(i, e){
    	var price = $(e).attr("price");
    	var pv = $(e).attr("pv");
    	var quantity = $(e).attr("num");
    	priceCount=priceCount+(price*quantity);
    	pvCount=pvCount+(pv*quantity);
    });

     

  4. 多选删除:其实很简单,将选中的商品获取到商品的“ID” value ,然后将其存入数组中,传入后台直接值循环提取即可
  • 上面讲了原理:看一下源码吧! 
    ​
    
    <div class="product_list">
    	<p>购物车</p>
    	<input type="hidden" id="cartId" value="${cartId}">
    	<div class="product">
    		<div class="product_top">
    			<div class="product_left">商品</div>
    			<div class="product_center">价格</div>
    			<div class="product_right">数量</div>
    			<div class="clear"></div>
    		</div>
    	
    		<!-- 多个商品,循环product_middle -->
    		<c:forEach items="${proMust}" var="pro">
    			<div class="product_middle">
    				<div class="product_left" >
    	
    					<input type="checkbox" id="box${pro.pid }" name="boxPid" value="${pro.cartid }" pv="${pro.pv}" price="${pro.unit_price}"  οnclick="checkBox(${pro.pid });" />
    					<a href="javascript:void(0);">
    						<div style="width: 100px;height: 100px;">
    							<img alt="加载中..."src="${pro.thumbnail}">
    						</div>	
    					</a>
    					<div class="product_left2" style="margin-left: 250px;">
    						<p style="margin-left: 40px;width: 300px;">${pro.product_name}</p>
    						<input type="hidden" id="propv${pro.pid }" value="${pro.pv}">
    						<input type="hidden" id="unit_price${pro.pid }" value="${pro.unit_price}">
    						<p>
    							<span class="money_span" style="margin-left: 40px;">¥${pro.unit_price }</span>
    							<c:if test="${currentUser.sys_role == 2}">
    								<span style="margin-left: 40px;">PV:${pro.pv }</span>
    							</c:if>
    							<c:if test="${currentUser.sys_role == 1}">
    								<span style="margin-left: 40px;">PV:${pro.pv }</span>
    							</c:if>
    						</p>
    					</div>
    				</div>
    				<div class="" style="margin-left: 620px;">
    					<a class="decrease" id="increase${pro.pid}"
    						οnclick="reduceSum(${pro.pid})">-</a> <input class="text_box"
    						name="num${pro.pid}" type="text" id="num${pro.pid}" value="${pro.quantity}">
    					<a class="increase" id="reduceSum${pro.pid}"
    						οnclick="plusSum(${pro.pid})">+</a>
    				</div>
    				
    			</div>
    		</c:forEach>
    	
    		<div class="count_bottom">
    			<div class="left">
    				<!-- <span><input type="checkbox" style="margin-right: 10px;" name="allcheckbox" οnclick="allcheckBox()"/>全选</span> -->
    				<span><button οnclick="deleteAllOrder()" style="height:65px;background-color: #000;color: #fff;border: 1px solid #000;float:left;">删除选中的商品</button></span>
    			</div>
    	
    			<div class="right">
    				<span>已选择<label class="label_price" id="shopSum">0</label>件商品
    				</span> <span>
    					<p id="pid1">
    						总合计:
    						<labe id="proCountPrice" class="label_price">¥0</label>
    					</p>
    					<c:if test="${currentUser.sys_role == 1}">
    						<p>
    						总合计PV:<label class="label_price" id="pvCoutPrice">0</label>
    						</p>
    					</c:if>
    					<c:if test="${currentUser.sys_role == 2}">
    						<p>
    						总合计PV:<label class="label_price" id="pvCoutPrice">0</label>
    						</p>
    					</c:if>						
    				</span> <span class="black_btn_2" style="margin-right: 0px;"
    					οnclick="orderSubmit()">提交订单</span>
    			</div>
    			<div class="clear"></div>
    		</div>
    	</div>
    </div>
    <form action="${APP_PATH}/jewelry/orderSubmitList.do?type=cart" method="post">
    	<input type="hidden" name="data" value="">
    	<input type="hidden" name="datanum" value="">
    </form>
    
    ​
     js实现方法:
    
    <script type="text/javascript">
    
    	//var datas = new Array();//取出来的ID拼接后传回后台
    	
    	$(document).ready(function(){
    		if($("#cartId").val()!="" && $("#cartId").val()!=null){
    			alert($("#cartId").val());	
    		}
    	});
    	
    	//选中box
    	function checkBox(pid) {
    		//公共计算
    		publicComputing(pid);
    		//选中数量
    		var proNmCheck = $('input[name="boxPid"]:checked');
    		$("#shopSum").html(proNmCheck.length);
    		
    		var checkPids = "";//得到pid值
    		var numShopCat=document.getElementsByName("num"+pid);
    		for (var j= 0; j < proNmCheck.length;j++) {
    			checkPids += $(proNmCheck[j]).val()+",";
    		}
    		$("[name=data]").val(checkPids);
    		$("[name=datanum]").val(numShopCat);
    		
    	}
    	
    	function publicComputing(pid){
    		//计算总价格与总pv
    		var priceCount=0;
    		var pvCount=0;
    		var sum = $("#num" + pid).val();
    		$("#box"+pid).attr("num",sum);
    	 	$("[name=boxPid]:checked").each(function(i, e){
    			var price = $(e).attr("price");
    			var pv = $(e).attr("pv");
    			var quantity = $(e).attr("num");
    			priceCount=priceCount+(price*quantity);
    			pvCount=pvCount+(pv*quantity);
    		});
    		$("#proCountPrice").html("¥" + priceCount);
    		$("#pvCoutPrice").html("" + pvCount);
    	}
    	
    	//加数量
    	function plusSum(pid) {
    		var num = $("#num" + pid).val();
    		if (num != null && num != "") {
    			num = parseInt(num);
    			$("#num" + pid).val(num + 1);
    		} else {
    			num = 0;
    			$("#num" + pid).val(num + 1);
    		}
    		
    		$.ajax({
    			type:"post",
    			url:"${APP_PATH}/jewelry/plusSum.do",
    			data:{"sum":num+1,"pid":pid},
    			dataType:"json",
    			success:function(data){
    				if(data){
    					return;
    				}
    			}
    		});
    	}
    
    	//减数量
    	function reduceSum(pid) {
    		var num = $("#num" + pid).val();
    		if (num != "" && num != null) {
    			num = parseInt(num);
    			if(num>0){
    				$("#num" + pid).val(num - 1);
    			}else{
    				num=0;
    				$("#num" + pid).val(num);
    			}
    		} else {
    			num = 0;
    			$("#num" + pid).val(mun - 1);
    		}
    		if(num!=0){
    			$.ajax({
    				type:"post",
    				url:"${APP_PATH}/jewelry/plusSum.do",
    				data:{"sum":num-1,"pid":pid},
    				dataType:"json",
    				success:function(data){
    					if(data){
    						return;
    					}
    				}
    			});
    		}
    	}
    
    	function orderSubmit(pid) {
    		var proNmCheck = $('input[name="boxPid"]:checked');
    		if(proNmCheck.length>0){
    			$("form").submit();	
    		}else{
    			alert("您还未选择商品!");
    			return;
    		}
    	}
    	
    	var all_oid="";
    	var deleteType=0;
    	//全选
    	function allcheckBox(){
    		deleteType=1;
    		//判断选择没有
    		var allchecke = $('input[name="allcheckbox"]:checked');
    		if(allchecke.length==0){
    			var checkList =document.getElementsByName("boxPid");
    			for(var i = 0; i<checkList.length; i++) {
    				checkList[i].checked = false;
    			}
    			all_oid="";
    			//选中数量
    			var proNmCheck = $('input[name="boxPid"]:checked');
    			$("#shopSum").html(proNmCheck.length);
    			
    		}else{
    			//全选
    			var checkList =document.getElementsByName("boxPid");
    			for(var i = 0; i<checkList.length; i++) {
    				checkList[i].checked = true;
    				all_oid+=$(checkList[i]).val()+",";
    			}
    			var proNmCheck = $('input[name="boxPid"]:checked');
    			$("#shopSum").html(proNmCheck.length);
    			
    		}
    	}
    	
    	function deleteAllOrder(){
    		//判断是全选删除还是选中删除
    		if(deleteType!=1){
    			//得到选中的值
    			var proNmCheck = $('input[name="boxPid"]:checked');
    			for (var j= 0; j < proNmCheck.length;j++) {
    				all_oid += $(proNmCheck[j]).val()+",";
    			}
    		}
    		$.ajax({
    			type:"post",
    			url:"${APP_PATH}/jewelry/delteAllOrder.do?all_order="+all_oid,
    			dataType:"json",
    			success:function(data){
    				if(data.success){
    					location.href = "${APP_PATH}/jewelry/proshopCat.do";
    				}
    			}
    		});
    	}
    	
    	//alert样式
    	function alert(e){
    	    $("body").append("<div id='msg'><span>"+e+"</span></div>");
    	    clearmsg();
    	}
    	function clearmsg(){
    	    var t = setTimeout(function(){
    	        $("#msg").remove();
    	    },2000);
    	};
    </script>

    如果你看了,觉得对你有帮助,那就赞一个吧!嘿嘿,下期见!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章