基于JQuery实现的类似购物商城的购物车
商品信息使用JSON数据来模拟
同一个产品点击多次,不会重复添加,而是在已有的基础上数量+1,
商品数量也可以手动输入,当输入0时,该商品将自动从购物车删除(点击减号到小于1时,也会提示是否从购物车删除商品信息)
每个产品的价格和总价都会根据添加和删除的操作来动态计算
附下载链接:/201112/yuanma/jquery_gouwuche.rar
基本的功能都已经实现, 建议使用IE浏览器运行,其他浏览器没有测试
HTML代码:
JS 代码
同一个产品点击多次,不会重复添加,而是在已有的基础上数量+1,
商品数量也可以手动输入,当输入0时,该商品将自动从购物车删除(点击减号到小于1时,也会提示是否从购物车删除商品信息)
每个产品的价格和总价都会根据添加和删除的操作来动态计算
附下载链接:/201112/yuanma/jquery_gouwuche.rar
基本的功能都已经实现, 建议使用IE浏览器运行,其他浏览器没有测试
HTML代码:
代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>无标题文档</title> </head> <body> <h2 style="text-align:left">商品列表</h2> <table width="800" border="0" id="tblProduct" cellpadding="1" cellspacing="1" bgcolor="black"> <tr id="trMaster" bgcolor="white" style="display:none"> <td> 编号:<span>000001</span><br /> 名称:<span>aa</span><br /> 价格:<span>2.5</span><br /> 描述:<span>aaaaa</span><br /> <div style="text-align:right"><input type="button" name="btnBuy" value="buy" /></div> </td> <td> 编号:<span>000001</span><br /> 名称:<span>aa</span><br /> 价格:<span>2.5</span><br /> 描述:<span>aaaaa</span><br /> <div style="text-align:right"><input type="button" name="btnBuy" value="buy" /></div> </td> <td> 编号:<span>000001</span><br /> 名称:<span>aa</span><br /> 价格:<span>2.5</span><br /> 描述:<span>aaaaa</span><br /> <div style="text-align:right"><input type="button" name="btnBuy" value="buy" /></div> </td> <td> 编号:<span>000001</span><br /> 名称:<span>aa</span><br /> 价格:<span>2.5</span><br /> 描述:<span>aaaaa</span><br /> <div style="text-align:right"><input type="button" name="btnBuy" value="buy" /></div> </td> </tr> </table> <h2 style="text-align:left">购物车</h2> <table width="800" border="0" id="tblOrder" cellpadding="1" cellspacing="1" bgcolor="black"> <tr bgcolor="white"><td>序号</td><td>编号</td><td>名称</td><td>描述</td><td>数量</td><td>单价</td><td>总价</td><td>删除</td></tr> <tr id="orderMarter" bgcolor="white" style="display:none"> <td style=" width:5%">1</td> <td style=" width:10%">000001</td> <td style=" width:10%">aa</td> <td>aaaaa</td> <td style=" width:15%"> <input type="text" name="txtNum" style="width:50px;" value="0" onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')"/> <input type="button" name='btnAdd' style="width:15px; text-align:center" value="+" /> <input type="button" name='btnCut' style="width:15px; text-align:center" value="-" /> </td> <td style=" width:10%">0</td> <td style=" width:10%"><font color="red">0</font></td> <td style=" width:5%; text-align:center"><input type="button" name='btnRemove' style="width:30px; text-align:center" value="X" /></td> </tr> </table> <table width="800" border="0" id="tblTotal" cellpadding="1" cellspacing="1" bgcolor="black"> <tr bgcolor="white" align="right"> <td>总价</td> <td id="tdTotal"><font color="#FF0000" size="+1" face="Arial, Helvetica, sans-serif">0.0</font></td> </tr> </table> </body>
JS 代码
代码如下:
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> <script type="text/javascript"> /* @@ @@ @@ */ var product=[ {prodId:"000001",prodName:"aa",price:2.5,description:"aaaaa"}, {prodId:"000002",prodName:"bb",price:2.4,description:"bbbbb"}, {prodId:"000003",prodName:"cc",price:2.3,description:"ccccc"}, {prodId:"000004",prodName:"dd",price:2.2,description:"ddddd"}, {prodId:"000005",prodName:"ee",price:2.1,description:"eeeee"}, {prodId:"000006",prodName:"ff",price:2.0,description:"fffff"}, {prodId:"000007",prodName:"gg",price:1.9,description:"ggggg"}, {prodId:"000008",prodName:"hh",price:1.8,description:"hhhhh"}, {prodId:"000009",prodName:"ii",price:1.7,description:"iiiii"} ]; </script> <script type="text/javascript"> var j=0,i=-1,k=-1,len=$("#trMaster td").size();//数据和模板的td 都可以自定义,格式正确即可 $.each(product,function(index,prod){ i++; k++; if(i%len==0){ j++; CloneTR(j);//根据模板来克隆行 } if(k==len) k=0; setTD(j,k,prod.prodId,prod.prodName,prod.price,prod.description);//给克隆行的td 赋值 }); //根据模板来克隆行 function CloneTR(id){ $("#trMaster").clone(true).css("display","block").attr("id","tr"+id).appendTo("#tblProduct"); $("#tr"+id+" td span").empty(); } //给克隆行的td 赋值 function setTD(trId,index,prodId,prodName,price,description){ var tr=$("#tr"+trId); $(tr).find("td:eq("+index+")").find("span:eq(0)").html(prodId); $(tr).find("td:eq("+index+")").find("span:eq(1)").html(prodName); $(tr).find("td:eq("+index+")").find("span:eq(2)").html(price); $(tr).find("td:eq("+index+")").find("span:eq(3)").html(description); } var tempId=""; var num=0; //点击buy $("input[name='btnBuy']").click(function(){ var elem=$(this).parent().parent();//获取点击的button 的td var prodId=$(elem).find("span:eq(0)").html(); var prodName=$(elem).find("span:eq(1)").html(); var price=$(elem).find("span:eq(2)").html(); var description=$(elem).find("span:eq(3)").html(); if(prodId==""||prodId==null||prodId==undefined){ alert("请点击其他产品"); }else{ if(tempId.indexOf(prodId)!=-1){ if(confirm('已存在,确定数量+1 吗?')){ $("#tblOrder tr:gt(1)").each(function(){ if($(this).find("td:eq(1)").html()==prodId){ var num=$(this).find("td:eq(4)").find("input[name='txtNum']").attr("value"); $(this).find("td:eq(4)").find("input[name='txtNum']").attr("value",+num+1);//相当于parseInt(num)+1; } }); } }else{ num++; CloneOrder(num,prodId,prodName,price,description); } tempId+=prodId+","; $("#tdTotal").html("<font color='#FF0000' size='+1' face='Arial, Helvetica, sans-serif'>"+GetTotalPrice().toFixed(2)+"</font>"); } }); //根据订单模板来clone 订单 function CloneOrder(id,prodId,prodName,price,description){ $("#orderMarter").clone(true).css("display","block").attr("id","tro"+id).appendTo("#tblOrder"); var tr=$("#tro"+id); $(tr).find("td:eq(0)").html(num); $(tr).find("td:eq(1)").html(prodId); $(tr).find("td:eq(2)").html(prodName); $(tr).find("td:eq(3)").html(description); $(tr).find("td:eq(4)").find("input[name='txtNum']").attr("value","1"); $(tr).find("td:eq(5)").html(price); $(tr).find("td:eq(6)").html("<font color='red'>"+price+"</font>"); } //获取总共价格 function GetTotalPrice(){ var totalNum=0; $("#tblOrder tr:gt(1)").each(function(){ var value=parseFloat($(this).find("td:eq(6)").text()); totalNum+=value; }); return totalNum; } $(function(){ $("#tblOrder input[name='txtNum']").bind("propertychange",function(){ var value=$(this).val(); var tr=$(this).parent().parent(); if(value==0){ if(confirm('确定要删除该商品吗?')){ $(tr).remove(); } }else{ var price=$(tr).find("td:eq(5)").html(); var total=value*price; $(tr).find("td:eq(6)").html("<font color='red'>"+total.toFixed(2)+"</font>"); $("#tdTotal").html("<font color='#FF0000' size='+1' face='Arial, Helvetica, sans-serif'>"+GetTotalPrice().toFixed(2)+"</font>"); } }); //加1 $("#tblOrder input[name='btnAdd']").click(function(){ var txtBox=$(this).parent().parent().find("td:eq(4)").find("input[name='txtNum']"); var value=$(txtBox).attr("value"); value=+value+1; $(txtBox).attr("value",value) }); //减1 $("#tblOrder input[name='btnCut']").click(function(){ var txtBox=$(this).parent().parent().find("td:eq(4)").find("input[name='txtNum']"); var tr=$(this).parent().parent(); var value=$(txtBox).attr("value"); if(value>1){ value=+value-1; $(txtBox).attr("value",value) }else{ if(confirm('确定要删除该商品吗?')){ $(tr).remove(); $("#tdTotal").html("<font color='#FF0000' size='+1' face='Arial, Helvetica, sans-serif'>"+GetTotalPrice().toFixed(2)+"</font>"); } } }); //删除btnRemove $("#tblOrder input[name='btnRemove']").click(function(){ var tr=$(this).parent().parent(); if(confirm('确定要删除该商品吗?')){ $(tr).remove(); $("#tdTotal").html("<font color='#FF0000' size='+1' face='Arial, Helvetica, sans-serif'>"+GetTotalPrice().toFixed(2)+"</font>"); } }); }); </script>