当前位置: 首页 > news >正文

JQ实现购物车价格计算

  在购车中我觉得最好使用each()和prop()方法,如果你用事件代理的话也可以实现但是代码有点长还要加入for循环遍历(不建议使用for循环,与优化有关(下面是我实现的方法))

  以下代码只提供作为思路上方法的参考(如果直接运行是会少一些文件的)

function Shopchar(data){
    this.data=data;
    this.bod=$("#bod");
    this.ckAll=$("#ckAll");
    this.firstc=$(".firstc");
    this.sumpri=$("#sumpri");
    this.set6=$(".set6")
    this.center_page=$(".center_page");
    this.set4=$(".set4")
    this.set3=$(".set3")
    this.set2=$(".set2")
    this.set=$(".set")
    this.set1=$(".set1");
    this.a=0;
    this.sub=true;//用来判断最后的总价计算
    this.init();
}
$.extend(Shopchar.prototype,{
    init:function(){
        this.price_all()
        this.price_a();
        this.check_to();
        this.check_shop()
        this.add_product()
        this.reduce_product()
        this.del_product()
    },
    //商品全选和反选
    //单选按钮价格计算
    price_all:function(ind){
            var b=this.firstc.eq(ind).prop("checked")
            if(b){
            this.a=Number(this.sumpri.html())+parseInt(this.set6.eq(ind).html())
            }if(!b){
                this.a=Number(this.sumpri.html())-parseInt(this.set6.eq(ind).html())
            }
        this.sumpri.html(this.a);
    },
    //全选按钮价格计算
    price_a:function(){
        this.a=0;
        var c=this.ckAll.is("input:checked")
        if(c){
            for(var i=0;i<this.firstc.length;i++){
            this.a+=parseInt(this.set6.eq(i).html());
            }
            this.sumpri.html(this.a);
        }else{
            this.sumpri.html(0);
        }
        
    },
    //全选按钮点击
    check_shop:function(){
        this.ckAll.on("click",$.proxy(this.check_sho,this))
    },
    check_sho:function(event){
        var target=event.target;
        if(target.id=="ckAll"){
        this.firstc.prop("checked",target.checked);
        this.price_a();
        }
    },
    //单选按钮点击
    check_to:function(){
        this.firstc.each($.proxy(this.son_check,this));
    },
    son_check:function(i){
        console.log(i)
        this.firstc.eq(i).on("change",i,$.proxy(this.son_chec,this));
    },
    son_chec:function(even){
        var index=even.data;
        console.log(even,index)
        if(this.firstc.not("input:checked").size()<=0){
            this.ckAll.prop("checked",true)
        }else{
            this.ckAll.prop("checked",false);
        }
        this.price_all(index);
    },
//商品添加和删除
//商品添加(点击+)
    add_product:function(){
        this.set4.each($.proxy(this.add_produc,this))
    },
    add_produc:function(i){
        this.set4.eq(i).on("click",i,$.proxy(this.add_prpdu,this))
    },
    add_prpdu:function(even){
        var index=even.data;
            var i=Number(this.set1.eq(index).val());    
            i++;
            this.set1.eq(index).val(i);
            var price=this.set.eq(index).html();
            console.log(price);
            this.set6.eq(index).html(price*i);
            if(this.firstc.eq(index).prop("checked")){
                this.sumpri.html(Number(this.sumpri.html())+parseInt(price))
            }
    },
    //商品减少(点击-)
    reduce_product:function(){
        this.set2.each($.proxy(this.reduce_produc,this))
    },
    reduce_produc:function(i){
        this.set2.eq(i).on("click",i,$.proxy(this.reduce_prpdu,this))
    },
    reduce_prpdu:function(even){
        var index=even.data;
            var i=Number(this.set1.eq(index).val());    
            i--;
            console.log(i)
            this.set1.eq(index).val(i);
            var price=this.set.eq(index).html();
            console.log(price);
            this.set6.eq(index).html(price*i);
            if(this.firstc.eq(index).prop("checked")){
                this.sumpri.html(Number(this.sumpri.html())-parseInt(price))
            }
    },
    //删除商品(点击删除按钮)
    del_product:function(){
        this.set3.each($.proxy(this.del_produc,this))
    },
    del_produc:function(i){
        this.set3.eq(i).on("click",i,$.proxy(this.del_produ,this))
    },
    del_produ:function(even){
        var index=even.data;
        this.center_page.eq(index).remove();
        this.sumpri.html(Number(this.sumpri.html())-this.set6.eq(index).html)
    }
})

 HTML样式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>购物车</title>
    <link rel="stylesheet" href="../css/reset.css">
    <link rel="stylesheet" href="../css/shopchar.css">
    <link rel="stylesheet" href="../css/quote.css">
    <link rel="stylesheet" href="../css/login.css">
</head>
<body>
    <div id="com_header"></div>    
    <div id="heade">
        <div class="center1">
            <input id="ckAll" type="checkbox">全选
            <span id="shop">商品</span>
            <span id="number">单价</span>
            <span id="unit">数量</span>
            <span id="count">小计</span>
            <span>操作</span>
        </div>
    </div>
    <div id="bod">
<!--         <div class="center">
            <input class="firstc" type="checkbox">
            <img src="../img/img (1).jpg" alt="美酒">
            <div class="dis">
                <span>小米MIX2 全面屏游戏手机 6GB+64GB 黑色 全网通4G手机 双卡
                </span>
            </div>
            <span class="set">¥2899.00</span>
            <button class="set2">-</button>
            <input class="set1" type="text">
            <button class="set4">+</button>
            <span class="set6">¥2899.00</span>
            <button class="set3">删除</button>
        </div> -->
    </div>
    <div class="center_page">
        <div id="bt_right">
            总价:<span id="sumpri">0.00</span>
            <a id="sub" href="##">结算</a>
        </div>
    </div>
</body>
</html>
<!-- 头 -->
<script src="../js/common/jquery.js"></script>
<script src="../js/common/first_regist.js"></script>
<script src="../js/common/com_regist.js"></script>
<script src="../js/common/com_html.js"></script>
<script src="../js/page/regist.js"></script>
<script>new Regist(".com_regis")</script>
<!-- 数据 -->

<script src="../js/page/shop_page.js"></script>
<script src="../js/page/shopchar.js"></script>
<script src="../js/page/shop.js"></script>

 

)

转载于:https://www.cnblogs.com/tc-jieke/p/9185023.html

相关文章:

  • Android UI开发第二十九篇——Android中五种常用的menu(菜单)
  • 安装配置资产管理软件GLPI
  • 走得不是很前但还是走在时代尖端
  • 一行python 生成终端二维码
  • Node.js 0.8.22 稳定版发布
  • SLAM技能树
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • openwrt无线连接互联网的实现原理【1】
  • 大作业分析
  • 常用Git操作
  • 判断是否IE6,如果是则提示升级浏览器
  • Java 多线程的基本概念及实现方式
  • 定义和声明的区别和联系
  • 沈向洋博士致2018届毕业生的公开信:计算机科学的三堂人生课
  • vuex从安装到使用的教程
  • 时间复杂度分析经典问题——最大子序列和
  • [译]如何构建服务器端web组件,为何要构建?
  • express + mock 让前后台并行开发
  • LeetCode29.两数相除 JavaScript
  • node入门
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • PV统计优化设计
  • Python_网络编程
  • 创建一个Struts2项目maven 方式
  • 对话:中国为什么有前途/ 写给中国的经济学
  • - 概述 - 《设计模式(极简c++版)》
  • 猴子数据域名防封接口降低小说被封的风险
  • 聊聊hikari连接池的leakDetectionThreshold
  • 使用docker-compose进行多节点部署
  • 新书推荐|Windows黑客编程技术详解
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 容器镜像
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (Git) gitignore基础使用
  • (ZT)一个美国文科博士的YardLife
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (正则)提取页面里的img标签
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net Core缓存组件(MemoryCache)源码解析
  • .Net MVC4 上传大文件,并保存表单
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .net下的富文本编辑器FCKeditor的配置方法
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • @JoinTable会自动删除关联表的数据
  • @Transient注解
  • [ C++ ] 继承