商品编辑续

简介: 商品编辑描述:主要是根据选中事件选中或取消,编辑DOM元素错做,增加,删除,修改。功能:用户选择某一个商品时,标记选中的商品,在商品栏中添加选中的商品并计算商品的总价钱。当用户取消选中商品或点击商品栏中的删除按钮时,删除对应的商品,取消商品的标记并重新计算价钱。

商品编辑

描述:主要是根据选中事件选中或取消,编辑DOM元素错做,增加,删除,修改。

功能:用户选择某一个商品时,标记选中的商品,在商品栏中添加选中的商品并计算商品的总价钱。
当用户取消选中商品或点击商品栏中的删除按钮时,删除对应的商品,取消商品的标记并重新计算价钱。
在商品列表中ul(id:accradio)中,每一个li属性上记录商品的ID,price,name等等基本信息。
在商品栏中ul(id:chooselist)中,记录li属性上的商品的ID,price,name等等基本信息。


备注:在计算价钱时,由于javascript本身的bug,会显示有偏差。
javscript中计算浮点数时有精度误差bug。
例如:
0.8 + 0.9 = 1.7000000000000002
并非是1.7


处理浮点数精度的bug:

function fixedNumber(t){
    if(-1==t.toFixed(2).toString().indexOf(".")){
        return (t.toFixed(2).toString());
    }else{
        return (t.toFixed(2).toString().replace(/(.+?)(0{1,})$/,"$1").replace(/(.+)\.$/,"$1"));
    }
}



效果如下图:





商品编辑续例子:

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>商品编辑续</title> <style> *{margin:0px;padding:0px;list-style: none; font-size: 12px; line-height: 20px;} .clearfix{*zoom:1;} .clearfix:after{content:"\0020";display:block;height:0;clear:both;overflow:hidden;visibility:hidden;} .main{ position: relative; width: 960px; margin: 0px auto;} .accradio{width: 760px;} .accradio li{float:left;width: 180px; text-align: center; margin: 0px 5px 10px 5px; } .accradio li em{display: inline-block; width: 14px; height: 14px; border: 1px solid #dedede; background: #fff;border-radius: 4px; vertical-align: -3px; *vertical-align: 0px; margin-right: 6px;} .accradio li em.on{background: #f60; border:1px solid #f81;} .choose{position: fixed; right:0px; top:0px; z-index: 1; width: 260px; border: 1px solid #ebebeb;} .choose .title{height: 44px; line-height: 44px; color: #333; font-size: 18px; background: #f7f7f7; padding-left: 10px;} .choose .showlists{padding: 10px 10px 10px 10px;} .choose li{ position: relative; height: 30px; line-height: 30px; } .choose li .delList{position: absolute; right: 0px; cursor: pointer;} .choose .chooseprice{text-align: right; color: #f60; font-size: 14px;} </style> </head> <body> <div class="main"> <ul id="accradio" class="accradio clearfix"> <li gid="1001" gname="商品1" price="100"> <a><img alt="" width="180px" height="180px" src="http://images.cnblogs.com/cnblogs_com/kuikui/354173/r_test1.jpg" /></a> <p><a>商品1</a></p> <em></em> 100元 <input type="hidden" name="name1" /> </li> <li gid="1002" gname="商品2" price="30"> <a><img alt="" width="180px" height="180px" src="http://images.cnblogs.com/cnblogs_com/kuikui/354173/r_test1.jpg" /></a> <p><a>商品2</a></p> <em></em> 30元 <input type="hidden" name="name2" /> </li> <li gid="1003" gname="商品3" price="9.9"> <a><img alt="" width="180px" height="180px" src="http://images.cnblogs.com/cnblogs_com/kuikui/354173/r_test1.jpg" /></a> <p><a>商品3</a></p> <em></em> 9.9元 <input type="hidden" name="name3" /> </li> <li gid="1004" gname="商品4" price="99.9"> <a><img alt="" width="180px" height="180px" src="http://images.cnblogs.com/cnblogs_com/kuikui/354173/r_test1.jpg" /></a> <p><a>商品4</a></p> <em></em> 99.9元 <input type="hidden" name="name4" /> </li> <li gid="1005" gname="商品5" price="200"> <a><img alt="" width="180px" height="180px" src="http://images.cnblogs.com/cnblogs_com/kuikui/354173/r_test1.jpg" /></a> <p><a>商品5</a></p> <em></em> 200元 <input type="hidden" name="name5" /> </li> <li gid="1006" gname="商品6" price="88"> <a><img alt="" width="180px" height="180px" src="http://images.cnblogs.com/cnblogs_com/kuikui/354173/r_test1.jpg" /></a> <p><a>商品6</a></p> <em></em> 88元 <input type="hidden" name="name6" /> </li> </ul> <div class="choose"> <div class="title">选择的商品</div> <div class="showlists"> <ul id="chooselist"></ul> <div id="showmsg">挑选您所需要的商品</div> <p id="chooseprice" class="chooseprice"></p> </div> </div> </div> <script type="text/javascript" src="http://files.cnblogs.com/kuikui/jquery.js"></script> <script> var chooseAcc={ init: function(){ var _this = this; this.accradio = $("#accradio"); this.chooselist = $("#chooselist"); _this.events(); }, events: function(){ var _this = this; _this.checkboxAction(); _this.listsAction(); }, checkboxAction: function(){ var _this = this; _this.accradio.find("li").click(function(){ var $this = $(this); if($(this).find("input").attr("checked")){ _this.del($this); } else{ _this.add($this); } }); }, listsAction: function(){ var _this = this; _this.chooselist.find(".delList").live("click",function(){ var tmpid = $(this).parent().attr("data-gid"); _this.del(_this.accradio.find("li[gid="+tmpid+"]")); }); }, fixedNumber:function (t){ if(-1==t.toFixed(2).toString().indexOf(".")){ return (t.toFixed(2).toString()); }else{ return (t.toFixed(2).toString().replace(/(.+?)(0{1,})$/,"$1").replace(/(.+)\.$/,"$1")); } }, add: function(obj){ var _this = this; obj.find("input").attr("checked",true); obj.find("em").addClass("on"); if(_this.chooselist.find("li[name="+obj.attr("gname")+"]").length!==0){ $("li[name="+obj.attr("gname")+"]").attr({"data-price":obj.attr("price"),"data-gid":obj.attr("gid"),"title":obj.attr("gname")}).html(obj.attr("gname")+"<span class='delList'>×</span>"); } else{ _this.chooselist.append("<li data-gid="+obj.attr("gid")+" data-price="+obj.attr("price")+" title="+obj.attr("gname")+" name="+obj.attr("gname")+">"+obj.attr("gname")+"<span class='delList'>×</span></li>"); } _this.allprice(); }, del: function(obj){ var _this = this; obj.find("input").removeAttr("checked"); obj.find("em").removeClass("on"); _this.chooselist.find("li[data-gid="+obj.attr("gid")+"]").remove(); _this.allprice(); }, allprice: function(){ var _this = this; var tmprice = 0; _this.chooselist.find("li").each(function(){ tmprice += parseFloat($(this).attr("data-price")); }); if(tmprice>0){ $("#chooseprice").html(_this.fixedNumber(tmprice)+"元").show(); $("#showmsg").hide(); } else{ $("#chooseprice").hide(); $("#showmsg").show(); } } } chooseAcc.init(); </script> </body> </html>

目录
相关文章
|
缓存 Kubernetes Docker
kubernetes 部署工具:sealos(2)
kubernetes 部署工具:sealos(2)
kubernetes 部署工具:sealos(2)
|
存储 Web App开发 消息中间件
原来10张图就可以搞懂分布式链路追踪系统原理
原来10张图就可以搞懂分布式链路追踪系统原理
原来10张图就可以搞懂分布式链路追踪系统原理
|
7月前
|
消息中间件 Java API
深入简出的带你精通java线程
线程与进程是操作系统中的两个重要概念。进程是资源分配的最小单位,负责加载指令、管理内存和IO;线程是CPU调度的最小单位,也被称为轻量级进程。
149 36
深入简出的带你精通java线程
|
11月前
|
机器学习/深度学习 数据采集 人工智能
未来的守护神:AI驱动的网络安全之盾,如何用智慧的光芒驱散网络黑暗势力?揭秘高科技防御系统背后的惊天秘密!
【10月更文挑战第3天】随着网络技术的发展,网络安全问题日益严峻,传统防御手段已显不足。本文探讨了构建AI驱动的自适应网络安全防御系统的必要性及其关键环节:数据采集、行为分析、威胁识别、响应决策和执行。通过Python库(如scapy、scikit-learn和TensorFlow)的应用实例,展示了如何利用AI技术提升网络安全防护水平。这种系统能够实时监控、智能分析并自动化响应,显著提高防护效率与准确性,为数字世界提供更强大的安全保障。
189 2
|
6月前
|
存储 机器学习/深度学习 人工智能
阿里云服务器第八代通用型g8i实例评测:性能与适用场景解析
阿里云服务器通用型g8i实例怎么样?g8i实例采用CIPU+飞天技术架构,并搭载最新的Intel 第五代至强可扩展处理器(代号EMR),不仅性能得到大幅提升,同时还拥有AMX加持的AI能力增强,以及全球范围内率先支持的TDX机密虚拟机能力。这些特性使得g8i实例在AI增强和全面安全防护两大方面表现出色,尤其适用于在线音视频及AI相关应用。本文将深入探讨g8i实例的产品特性、优势、适用场景及规格族,以帮助您更好地了解这款产品,以供参考和选择。
|
10月前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
691 3
|
存储
头指针和头结点的区别
头指针和头结点的区别
662 1
|
存储 人工智能 搜索推荐
持续打通中国CRM SaaS生态,阿里云上的Salesforce稳步“着陆”
持续打通中国CRM SaaS生态,阿里云上的Salesforce稳步“着陆”
|
缓存 安全 数据安全/隐私保护
在智能媒体服务中,跨域问题可以通过设置CORS(跨源资源共享)规则来解决
在智能媒体服务中,跨域问题可以通过设置CORS(跨源资源共享)规则来解决
220 4
|
Linux C# C++
【.NET Developer】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务
本文介绍了如何使用VS2019和.NET框架创建一个Blazor应用,并将其部署到Azure应用服务。首先,Blazor是一个使用C#而非JavaScript构建交互式Web UI的框架,支持共享服务器和客户端应用逻辑,以及与Docker和Azure集成。任务包括创建Blazor项目,配置Dockerfile为Linux容器,本地测试,发布到Azure Container Registry (ACR),然后在Azure App Service for Container上部署。在部署过程中,需确保Docker设置正确,开启ACR的Admin访问权限,并监控镜像拉取和容器启动日志。
574 0