初学者用jquery来写仿真的购物车,确实有点恶心,那我们今天就把这万恶的购物车剖析一下,来看看到底有什么难的.

购物车的效果图

那我们先从复选框开始吧,废话不多说,上代码!!

带有序号的,都是一些分析!

1.全选或全不选效果

//点击复选框全选或全不选效果
$("#allCheckBox").click(function(){
var checked=$(this).is(":checked"); //检查这个集合里有没有匹配的元素 返回true,false
$(".cart_td_1").children().attr("checked",checked); //把上面的变量放在这边来用
});
//判断是否全选
function ifAllChecked(){
var checkedBoxs=$(".cart_td_1").children(); //获取到集合
var sum=checkedBoxs.size(); //size() 与length() 返回的值是一样的
var k=0; //迭代变量
//each是循环
checkedBoxs.each(function(index,dom){ //index当前对象的索引,或者是所有的对象的索引 dom当前对象,或者是对象
if($(dom).is(":checked")) k++; //匹配页面上处于选中状态的元素
});
if(k==sum){ //当我们拿出了input复选框的个数
$("#allCheckBox").attr("checked",true); //如果为true的话,就改变值
}else{
$("#allCheckBox").attr("checked",false); //否则的话,我们也改变值
}
}
ifAllChecked();//页面加载完后运行
//单选判断
$(".cart_td_1").children().click(function(){
ifAllChecked();
});

当我们解决了复选框的问题后,剩下的就是计算总价与小计的问题了,其实咋们仔细想想的话,压根就不难,难的是这些值它们全在html页面上,我们该怎么把他们拿下来,为我们所用哪?!!!!

2.进行计算函数

//计算总价与小计
function productCount(){ var $tr=$("#shopping").find("tr[id]"); //总价与积分的初始值
var summer=0;
var integral=0; $tr.each(function(i,dom){ //我们开始把页面上的值全部拿下来
var num=$(dom).children(".cart_td_6").find("input").val();//商品数量
var price=num*$(dom).children(".cart_td_5").text();//商品小计 $(dom).children(".cart_td_7").html(price);//显示商品小计
summer+=price;//总价 已经开始在累加
integral+=$(dom).children(".cart_td_4").text()*num;//积分
});
$("#total").text(summer); //总价
$("#integral").text(integral); //积分
}
productCount();//页面加载完后运行

3.点击减号或加号得行为

//商品增加减少,flag为true时增加,flag为false时减少
function changeNumber(dom,flag){
var $input = $(dom).parent().find("input");
var value = $input.val(); if(flag){
value++;
}else{
value--;
if(value<=0){ //最起码件数不能低于0件,
value=1; //当我们已经规定了不能低于0件的时候,我们到底还是把件数减了,所以我们还是的把件数调整回来
alert("宝贝数量必须大于0");
}
}
$input.val(value);
productCount();
};

因为加号和减号是图片,所以我们得把函数绑定到图片上

4.把点击加减函数绑定到图片上

 //点击减少     当我们点击图片的时候,顺便调用一下方法
$(".cart_td_6").find("img[alt='minus']").click(function(){changeNumber(this,false);});
//点击增加
$(".cart_td_6").find("img[alt='add']").click(function(){changeNumber(this,true);});

当然我们还有删除某一列商品,所以我使用了节点操作

5.节点操作

   //点击删除   节点操作
$(".cart_td_8").find("a").click(function(){
$(this).parent().parent().prev().remove();//删除前一tr
$(this).parent().parent().remove();//删除当前tr
productCount();
});

还有删除所选,所以我们自己还得自定义一个函数

6.删除所选

 //点击删除所选
$("#deleteAll").click(function(){
$("#shopping").find("tr[id]").each(function(i,e){
var $tr=$(e);
//返回的值是true或false
var checked=$tr.children(".cart_td_1").children().is(":checked");
if(checked){
//prev遍历的方式用于搜索自己本身同辈元素的上一个
$tr.prev().remove();
$tr.remove();
}
});
//点击删除所选,依然调用计算总价的函数
productCount();
});

所以经过我们层层的解析,其实压根也不难,对吧!!!

我们这个虚假的购物车,才算完成!!!

那我们下次再见把!

初学jQuery之jQuery虚假购物车-------与真实数据无关的更多相关文章

  1. 基于jquery右侧悬浮加入购物车代码

    分享一款基于jquery右侧悬浮加入购物车代码.这是一款基于jQuery实现的仿天猫右侧悬浮加入购物车菜单代码. 在线预览   源码下载 实现的代码: <!--左侧产品parabola.js控制 ...

  2. jQuery.fn和jQuery.prototype jquery.extend() jquery.fn.extend()区别介绍

    这里的 jQuery , jQuery.fn , jQuery,fn,init ,jQuery,prototype 都代表什么. 来看下jQuery的源码是怎么样定义的: (function( win ...

  3. jQuery 2.0.3 源码分析 数据缓存

    历史背景: jQuery从1.2.3版本引入数据缓存系统,主要的原因就是早期的事件系统 Dean Edwards 的 ddEvent.js代码 带来的问题: 没有一个系统的缓存机制,它把事件的回调都放 ...

  4. jQuery初探 jQuery选取和操纵元素的特点

    jQuery初探 jQuery选取和操纵元素的特点 JavaScript选取元素 先来看看不用jQuery的时候我们是怎么处理元素选取的. JavaScript选取元素的时候,可以根据id获取元素,当 ...

  5. jQuery实例——jQuery实现联动下拉列表查询框--转http://www.cnblogs.com/picaso/archive/2012/04/08/2437442.html#undefined

    jQuery实例--jQuery实现联动下拉列表查询框   在查询与列表显示的时候经常用到联动列表显示,比如一级选项是国家,二级选项是省,三级是市,这样的联动是联系的实时导出的,比如你不可能选择了四川 ...

  6. jQuery - 2.jQuery选择器

    1.id 选择器 2.标签选择器 3.类选择器 4.复合选择器 5.层次选择器 JQuery的迭代   JQuery选择器 JQuery选择器用于查找满足条件的元素,比如可以用$("#控件I ...

  7. jQuery-认识JQuery,jQuery选择器

    认识JQuery: 1.window.onload与$(document).ready()的区别 window.onload $(document).ready() 执行时机 必须等待网页中的所有内容 ...

  8. jQuery获取一般处理程序(ashx)的JSON数据

    昨天有在开发的软件生产线生产流程,RFID扫描IC卡的数据,当中有用到jQuery获取一般处理程序(ashx)的JSON数据.今有把它写成一个小例子,望需要的网友能参考. 在网站中,创建一个一般应用程 ...

  9. 【转】Jquery ajax方法解析返回的json数据

    转自http://blog.csdn.net/haiqiao_2010/article/details/12653555 最近在用jQuery的ajax方法传递接收json数据时发现一个问题,那就是返 ...

随机推荐

  1. GFS分布式文件系统脚本

    #!/bin/bashfor i in $(fdisk -l | grep -wo "/dev/sd[b-z]" | sort)dodd if=/dev/zero of=$i bs ...

  2. 30.3 FCL中的混合构造

     30.3.2 Monitor类和同步块 internal sealed class Transaction { private readonly object _lock = new object( ...

  3. Enable ssh root login in Solaris

    1. Change the file /etc/ssh/sshd_config with PermitRootLogin yes to replace PermitRootLogin no 2. re ...

  4. npm和gulp学习

    npm的使用 node Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,是一种JavaScript语言运行平台,和浏览器这个运行平台是同一个概念. npm np ...

  5. _initialize() 区别 __construct()

    _initialize()方法是在任何方法执行之前,都要执行的,当然也包括 __construct构造函数. 也就是说如果存在_initialize()函数,调用对象的任何方法都会导致_initial ...

  6. Git下的标签

    发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本.将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库的一个快照 ...

  7. “从客户端(content="XXXX")中检测到有潜在危险的 Request.Form值” 解决方案

    解决方案一: 在.aspx文件头中加: <%@Page validateRequest="false" %> 解决方案二: 修改web.config文件: <co ...

  8. web开发如何使用高德地图API(四)通过AMap.Marker自定义标点

    说两句: 以下内容除了我自己写的部分,其他部分在高德开放平台都有(可点击外链访问). 我所整理的内容以实际项目为基础希望更有针对性的,更精简. 点击直奔主题. 准备工作: 首先,注册开发者账号,成为高 ...

  9. HDU 1836 畅通工程

    畅通工程 Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 18636 ...

  10. FOJ2250 不可能弹幕结界

    Problem 2250 不可能弹幕结界 Time Limit: 1000 mSec    Memory Limit : 65536 KB Problem Description 咲夜需要穿过一片弹幕 ...