• springboot项目:加入购物车


    目录

    一、参数解析器以及购物车后台

    参数解析器

    User 

    为什么要使用参数解析器?

    UserArgumentResovler 

    WebConfig 

     ShopCarController 

    User 

     购物车后台

    ShopCar 

     ShopCarItem 

     ShopCarController 

    二、商品详情页

    index.html

    GoodsController 

     proDetail.html

    三、购物车查询以及新增的前台

     proDetail.html

    cart.html

    四、购物车删除和修改的功能

    cart.js

     cart.html


    一、参数解析器以及购物车后台

    参数解析器

    修改实体类的时间数据类型为date 

    User 

    1. package com.cdl.spbootpro.model;
    2. import com.baomidou.mybatisplus.annotation.TableName;
    3. import java.time.LocalDateTime;
    4. import java.io.Serializable;
    5. import java.util.Date;
    6. import lombok.Data;
    7. import lombok.EqualsAndHashCode;
    8. /**
    9. *

    10. * 用户信息表
    11. *

    12. *
    13. * @author cdl
    14. * @since 2022-11-05
    15. */
    16. @Data
    17. @EqualsAndHashCode(callSuper = false)
    18. @TableName("t_user")
    19. public class User implements Serializable {
    20. /**
    21. * 昵称
    22. */
    23. private String nickname;
    24. /**
    25. * MD5(MD5(pass明文+固定salt)+salt)
    26. */
    27. private String password;
    28. /**
    29. * 随机salt
    30. */
    31. private String salt;
    32. /**
    33. * 注册时间
    34. */
    35. private Date registerDate;
    36. /**
    37. * 最后一次登录时间
    38. */
    39. private Date lastLoginDate;
    40. /**
    41. * 登录次数
    42. */
    43. private Integer loginCount;
    44. }

    为什么要使用参数解析器?

    ShopCarController 

    1. package com.cdl.spbootpro.controller;
    2. import com.cdl.spbootpro.exception.BusinessException;
    3. import com.cdl.spbootpro.model.User;
    4. import com.cdl.spbootpro.service.IRedisService;
    5. import com.cdl.spbootpro.utils.JsonResponseBody;
    6. import com.cdl.spbootpro.utils.JsonResponseStatus;
    7. import org.springframework.beans.factory.annotation.Autowired;
    8. import org.springframework.stereotype.Controller;
    9. import org.springframework.web.bind.annotation.CookieValue;
    10. import org.springframework.web.bind.annotation.RequestMapping;
    11. import org.springframework.web.bind.annotation.ResponseBody;
    12. /**
    13. * @author cdl
    14. * @site www.cdl.com
    15. * @create 2022-11-07 16:54
    16. */
    17. @Controller
    18. @RequestMapping("/shopCar")
    19. public class ShopCarController {
    20. @Autowired
    21. private IRedisService iRedisService;
    22. /***
    23. * 使用参数解析器之前的做法弊端:
    24. * 在每个需要登录之后才能操作的功能,都需要做用户登录验证,即以下代码都需要写一遍
    25. * @param token
    26. * @return
    27. */
    28. @RequestMapping("/")
    29. public JsonResponseBody check(@CookieValue("token")String token){//取Cookie中的信息 判断是否登录
    30. if(token == null)
    31. throw new BusinessException(JsonResponseStatus.TOKEN_EEROR);//令牌失效
    32. User user = iRedisService.getUserToRedis(token);//通过token令牌查询
    33. if(user == null)
    34. throw new BusinessException(JsonResponseStatus.TOKEN_EEROR);
    35. return new JsonResponseBody();
    36. }
    37. }

    新建一个参数解析器类

    UserArgumentResovler 

    1. package com.cdl.spbootpro.config;
    2. import com.cdl.spbootpro.exception.BusinessException;
    3. import com.cdl.spbootpro.model.User;
    4. import com.cdl.spbootpro.service.IRedisService;
    5. import com.cdl.spbootpro.utils.CookieUtils;
    6. import com.cdl.spbootpro.utils.JsonResponseStatus;
    7. import org.springframework.beans.factory.annotation.Autowired;
    8. import org.springframework.core.MethodParameter;
    9. import org.springframework.stereotype.Component;
    10. import org.springframework.web.bind.support.WebDataBinderFactory;
    11. import org.springframework.web.context.request.NativeWebRequest;
    12. import org.springframework.web.method.support.HandlerMethodArgumentResolver;
    13. import org.springframework.web.method.support.ModelAndViewContainer;
    14. import javax.servlet.http.HttpServletRequest;
    15. /**
    16. * @author cdl
    17. * @site www.cdl.com
    18. * @create 2022-11-07 17:21
    19. *
    20. * 凡是实现HandlerMethodArgumentResolver的类 都是参数解析器类
    21. */
    22. @Component
    23. public class UserArgumentResovler implements HandlerMethodArgumentResolver {
    24. @Autowired
    25. private IRedisService iRedisService;
    26. /**
    27. * supportsParameter的方法的返回值,
    28. * true:则会调用下面resolveArgument
    29. * false:则不调用
    30. * @param methodParameter
    31. * @return
    32. */
    33. @Override
    34. public boolean supportsParameter(MethodParameter methodParameter) {
    35. return methodParameter.getParameterType() == User.class;
    36. }
    37. /**
    38. * resolveArgument 具体的业务代码处理
    39. *
    40. * @param methodParameter
    41. * @param modelAndViewContainer
    42. * @param nativeWebRequest
    43. * @param webDataBinderFactory
    44. * @return
    45. * @throws Exception
    46. */
    47. @Override
    48. public Object resolveArgument(MethodParameter methodParameter,
    49. ModelAndViewContainer modelAndViewContainer,
    50. NativeWebRequest nativeWebRequest,
    51. WebDataBinderFactory webDataBinderFactory) throws Exception {
    52. HttpServletRequest request = (HttpServletRequest)nativeWebRequest.getNativeRequest();
    53. String token = CookieUtils.getCookieValue(request,"token");
    54. if (token == null)
    55. throw new BusinessException(JsonResponseStatus.TOKEN_EEROR);
    56. User user = iRedisService.getUserToRedis(token);
    57. if (user == null)
    58. throw new BusinessException(JsonResponseStatus.TOKEN_EEROR);
    59. return user;
    60. }
    61. }

    一个配置类

    WebConfig 

    1. package com.cdl.spbootpro.config;
    2. import org.springframework.beans.factory.annotation.Autowired;
    3. import org.springframework.context.annotation.Configuration;
    4. import org.springframework.web.method.support.HandlerMethodArgumentResolver;
    5. import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
    6. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    7. import java.util.List;
    8. /**
    9. * @author cdl
    10. * @site www.cdl.com
    11. * @create 2022-11-07 18:06
    12. *
    13. * WebMvcConfigurer添加之后,会覆盖application.yml中静态资源映射
    14. * mvc:
    15. * static-path-pattern: /static/**
    16. *
    17. * @Configuration改类是一个配置类
    18. */
    19. @Configuration
    20. public class WebConfig implements WebMvcConfigurer {
    21. @Autowired
    22. private UserArgumentResovler userArgumentResovler;
    23. /**
    24. * 配置静态资源访问映射,使用了WebMvcConfigurer会覆盖原有的application.yml文件中的静态资源配置
    25. * @param registry
    26. */
    27. @Override
    28. public void addResourceHandlers(ResourceHandlerRegistry registry) {
    29. registry.addResourceHandler("/static/**")
    30. .addResourceLocations("classpath:/static/");
    31. }
    32. /**
    33. * 将对应的参数解析器 添加到配置中
    34. * 添加自定义的参数解析器
    35. * @param resolvers
    36. */
    37. @Override
    38. public void addArgumentResolvers(List resolvers) {
    39. resolvers.add(userArgumentResovler);
    40. }
    41. }

     ShopCarController 

    1. package com.cdl.spbootpro.controller;
    2. import com.cdl.spbootpro.exception.BusinessException;
    3. import com.cdl.spbootpro.model.User;
    4. import com.cdl.spbootpro.service.IRedisService;
    5. import com.cdl.spbootpro.utils.JsonResponseBody;
    6. import com.cdl.spbootpro.utils.JsonResponseStatus;
    7. import org.springframework.beans.factory.annotation.Autowired;
    8. import org.springframework.stereotype.Controller;
    9. import org.springframework.web.bind.annotation.CookieValue;
    10. import org.springframework.web.bind.annotation.RequestMapping;
    11. import org.springframework.web.bind.annotation.ResponseBody;
    12. /**
    13. * @author cdl
    14. * @site www.cdl.com
    15. * @create 2022-11-07 16:54
    16. */
    17. @Controller
    18. @RequestMapping("/shopCar")
    19. public class ShopCarController {
    20. @Autowired
    21. private IRedisService iRedisService;
    22. // /***
    23. // * 使用参数解析器之前的做法弊端:
    24. // * 在每个需要登录之后才能操作的功能,都需要做用户登录验证,即以下代码都需要写一遍
    25. // * @param token
    26. // * @return
    27. // */
    28. // @RequestMapping("/")
    29. // public JsonResponseBody check(@CookieValue("token")String token){//取Cookie中的信息 判断是否登录
    30. // if(token == null)
    31. // throw new BusinessException(JsonResponseStatus.TOKEN_EEROR);//令牌失效
    32. // User user = iRedisService.getUserToRedis(token);//通过token令牌查询
    33. // if(user == null)
    34. // throw new BusinessException(JsonResponseStatus.TOKEN_EEROR);
    35. // return new JsonResponseBody();
    36. // }
    37. @ResponseBody
    38. @RequestMapping("/check")
    39. public JsonResponseBody check(User user){
    40. return new JsonResponseBody();
    41. }
    42. }

    此时运行项目 若是未登录的状态则提示要先登录

     

    登录一下 redis中也有值

    由于后面要用到id 所以给实体类添加一个id

    User 

    1. package com.cdl.spbootpro.model;
    2. import com.baomidou.mybatisplus.annotation.TableName;
    3. import java.time.LocalDateTime;
    4. import java.io.Serializable;
    5. import java.util.Date;
    6. import lombok.Data;
    7. import lombok.EqualsAndHashCode;
    8. /**
    9. *

    10. * 用户信息表
    11. *

    12. *
    13. * @author cdl
    14. * @since 2022-11-05
    15. */
    16. @Data
    17. @EqualsAndHashCode(callSuper = false)
    18. @TableName("t_user")
    19. public class User implements Serializable {
    20. private long id;
    21. /**
    22. * 昵称
    23. */
    24. private String nickname;
    25. /**
    26. * MD5(MD5(pass明文+固定salt)+salt)
    27. */
    28. private String password;
    29. /**
    30. * 随机salt
    31. */
    32. private String salt;
    33. /**
    34. * 注册时间
    35. */
    36. private Date registerDate;
    37. /**
    38. * 最后一次登录时间
    39. */
    40. private Date lastLoginDate;
    41. /**
    42. * 登录次数
    43. */
    44. private Integer loginCount;
    45. }

     购物车后台

    建一个vo的包  用于数据呈现

    ShopCar 

    1. package com.cdl.spbootpro.model.vo;
    2. import java.util.ArrayList;
    3. import java.util.Arrays;
    4. import java.util.Iterator;
    5. import java.util.List;
    6. /**
    7. * @author cdl
    8. * @site www.cdl.com
    9. * @create 2022-11-07 19:02
    10. *
    11. *view object
    12. * 购物车对象
    13. */
    14. public class ShopCar {
    15. private List items = new ArrayList<>();
    16. public List getItems() {
    17. return items;
    18. }
    19. public void setItems(List items) {
    20. this.items = items;
    21. }
    22. // 增加
    23. public void add(ShopCarItem shopCarItem) {
    24. // 1.当购物车存在该商品时
    25. for (ShopCarItem item : items) {
    26. if (shopCarItem.getGid().equals(item.getGid())) {
    27. item.setQuantity(item.getQuantity() + 1);
    28. return;
    29. }
    30. }
    31. // 2.当购物车不存在该商品时
    32. items.add(shopCarItem);
    33. }
    34. // 删除 1,2,3
    35. public void delete(String gids) {
    36. List gidList = Arrays.asList(gids.split(","));
    37. Iterator it = items.iterator();
    38. while (it.hasNext()) {
    39. ShopCarItem next = it.next();
    40. if (gidList.contains(next.getGid()+"")) {
    41. it.remove();
    42. }
    43. }
    44. }
    45. // 修改
    46. public void update(ShopCarItem shopCarItem) {
    47. for (ShopCarItem item : items) {
    48. if (shopCarItem.getGid().equals(item.getGid())) {
    49. item.setQuantity(shopCarItem.getQuantity());
    50. }
    51. }
    52. }
    53. // 查询
    54. // 小计
    55. }

     ShopCarItem 

    1. package com.cdl.spbootpro.model.vo;
    2. import lombok.AllArgsConstructor;
    3. import lombok.Data;
    4. import lombok.NoArgsConstructor;
    5. import java.math.BigDecimal;
    6. /**
    7. * @author cdl
    8. * @site www.cdl.com
    9. * @create 2022-11-07 19:02
    10. *
    11. *
    12. */
    13. @Data
    14. @NoArgsConstructor
    15. @AllArgsConstructor
    16. public class ShopCarItem {
    17. // 商品id、商品名称、商品单价、商品数量、图片
    18. private Long gid;
    19. private String goodsName;
    20. private String goodsImg;
    21. private BigDecimal goodsPrice;
    22. private Integer quantity;
    23. /**
    24. * 这是个虚拟方法,用于计算商品的小计
    25. * 公式:商品的单价*数量=小计
    26. * @return
    27. */
    28. public BigDecimal smalltotal(){
    29. BigDecimal num=new BigDecimal(quantity);
    30. return goodsPrice.multiply(num);
    31. }
    32. }

     ShopCarController 

    1. package com.cdl.spbootpro.controller;
    2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    3. import com.cdl.spbootpro.exception.BusinessException;
    4. import com.cdl.spbootpro.model.Goods;
    5. import com.cdl.spbootpro.model.User;
    6. import com.cdl.spbootpro.model.vo.ShopCar;
    7. import com.cdl.spbootpro.model.vo.ShopCarItem;
    8. import com.cdl.spbootpro.service.IGoodsService;
    9. import com.cdl.spbootpro.service.IRedisService;
    10. import com.cdl.spbootpro.utils.JsonResponseBody;
    11. import com.cdl.spbootpro.utils.JsonResponseStatus;
    12. import org.springframework.beans.factory.annotation.Autowired;
    13. import org.springframework.stereotype.Controller;
    14. import org.springframework.web.bind.annotation.CookieValue;
    15. import org.springframework.web.bind.annotation.RequestMapping;
    16. import org.springframework.web.bind.annotation.ResponseBody;
    17. import org.springframework.web.servlet.ModelAndView;
    18. import javax.servlet.http.HttpServletRequest;
    19. import javax.servlet.http.HttpServletResponse;
    20. import javax.servlet.http.HttpSession;
    21. /**
    22. * @author cdl
    23. * @site www.cdl.com
    24. * @create 2022-11-07 16:54
    25. */
    26. @Controller
    27. @RequestMapping("/shopCar")
    28. public class ShopCarController {
    29. @Autowired
    30. private IRedisService iRedisService;
    31. // /***
    32. // * 使用参数解析器之前的做法弊端:
    33. // * 在每个需要登录之后才能操作的功能,都需要做用户登录验证,即以下代码都需要写一遍
    34. // * @param token
    35. // * @return
    36. // */
    37. // @RequestMapping("/")
    38. // public JsonResponseBody check(@CookieValue("token")String token){//取Cookie中的信息 判断是否登录
    39. // if(token == null)
    40. // throw new BusinessException(JsonResponseStatus.TOKEN_EEROR);//令牌失效
    41. // User user = iRedisService.getUserToRedis(token);//通过token令牌查询
    42. // if(user == null)
    43. // throw new BusinessException(JsonResponseStatus.TOKEN_EEROR);
    44. // return new JsonResponseBody();
    45. // }
    46. @ResponseBody
    47. @RequestMapping("/check")
    48. public JsonResponseBody check(User user){
    49. return new JsonResponseBody();
    50. }
    51. // 从session中获取购物车对象
    52. private ShopCar getShopCar(User user, HttpServletRequest request) {
    53. HttpSession session = request.getSession();
    54. ShopCar shopCar = (ShopCar) session.getAttribute(user.getId() + "_shopCar");
    55. if (shopCar == null) {
    56. shopCar = new ShopCar();
    57. session.setAttribute(user.getId() + "_shopCar", shopCar);
    58. }
    59. return shopCar;
    60. }
    61. // 查询
    62. @RequestMapping("/queryShopCar")
    63. public ModelAndView queryShopCar(User user,
    64. HttpServletRequest request,
    65. HttpServletResponse resp) {
    66. ModelAndView mv = new ModelAndView();
    67. ShopCar shopCar = getShopCar(user, request);
    68. mv.addObject("shopCar", shopCar);
    69. mv.setViewName("cart.html");
    70. return mv;
    71. }
    72. @Autowired
    73. private IGoodsService goodsService;
    74. // 增加
    75. @ResponseBody
    76. @RequestMapping("/add")
    77. public JsonResponseBody add(User user,
    78. HttpServletRequest request,
    79. HttpServletResponse resp,
    80. long gid) {
    81. ModelAndView mv = new ModelAndView();
    82. ShopCar shopCar = getShopCar(user, request);
    83. Goods goods =
    84. goodsService.getOne(new QueryWrapper().eq("gid", gid));
    85. //初始化商品详情ShopCarItem
    86. ShopCarItem item = new ShopCarItem();
    87. item.setQuantity(1);
    88. item.setGid(goods.getGid());
    89. item.setGoodsImg(goods.getGoodsImg());
    90. item.setGoodsName(goods.getGoodsName());
    91. item.setGoodsPrice(goods.getGoodsPrice());
    92. shopCar.add(item);
    93. return new JsonResponseBody();
    94. }
    95. // 修改
    96. @ResponseBody
    97. @RequestMapping("/update")
    98. public JsonResponseBody update(User user,
    99. HttpServletRequest request,
    100. HttpServletResponse resp,
    101. ShopCarItem shopCarItem) {
    102. ModelAndView mv = new ModelAndView();
    103. ShopCar shopCar = getShopCar(user, request);
    104. shopCar.update(shopCarItem);
    105. return new JsonResponseBody();
    106. }
    107. // 删除
    108. @ResponseBody
    109. @RequestMapping("/delete")
    110. public JsonResponseBody delete(User user,
    111. HttpServletRequest request,
    112. HttpServletResponse resp,
    113. String gids) {
    114. ModelAndView mv = new ModelAndView();
    115. ShopCar shopCar = getShopCar(user, request);
    116. shopCar.delete(gids);
    117. return new JsonResponseBody();
    118. }
    119. }

    二、商品详情页

    使用写的后台代码

    点击首页index.html跳转至商品详情proDetail.html

    index.html

    1. html>
    2. <html>
    3. <head lang="en">
    4. <#include "common/head.html">
    5. <link rel="stylesheet" type="text/css" href="css/public.css"/>
    6. <link rel="stylesheet" type="text/css" href="css/index.css" />
    7. head>
    8. <body>
    9. <#include "common/top.html">
    10. <div class="block_home_slider">
    11. <div id="home_slider" class="flexslider">
    12. <ul class="slides">
    13. <li>
    14. <div class="slide">
    15. <img src="img/banner2.jpg"/>
    16. div>
    17. li>
    18. <li>
    19. <div class="slide">
    20. <img src="img/banner1.jpg"/>
    21. div>
    22. li>
    23. ul>
    24. div>
    25. div>
    26. <div class="thImg">
    27. <div class="clearfix">
    28. <a href="${ctx}/page/vase_proList.html"><img src="img/i1.jpg"/>a>
    29. <a href="${ctx}/page/proList.html"><img src="img/i2.jpg"/>a>
    30. <a href="#2"><img src="img/i3.jpg"/>a>
    31. div>
    32. div>
    33. <div class="news">
    34. <div class="wrapper">
    35. <h2><img src="img/ih1.jpg"/>h2>
    36. <div class="top clearfix">
    37. <a href="${ctx}/page/proDetail.html"><img src="img/n1.jpg"/><p>p>a>
    38. <a href="${ctx}/page/proDetail.html"><img src="img/n2.jpg"/><p>p>a>
    39. <a href="${ctx}/page/proDetail.html"><img src="img/n3.jpg"/><p>p>a>
    40. div>
    41. <div class="bott clearfix">
    42. <a href="${ctx}/page/proDetail.html"><img src="img/n4.jpg"/><p>p>a>
    43. <a href="${ctx}/page/proDetail.html"><img src="img/n5.jpg"/><p>p>a>
    44. <a href="${ctx}/page/proDetail.html"><img src="img/n6.jpg"/><p>p>a>
    45. div>
    46. <h2><img src="img/ih2.jpg"/>h2>
    47. <#if gt01?? && gt01?size gt 0>
    48. <#list gt01?keys as key>
    49. <div class="flower clearfix tran">
    50. <#list gt01[key] as g>
    51. <a href="${ctx}/goods/detail/${g.gid}" class="clearfix">
    52. <dl>
    53. <dt>
    54. <span class="abl">span>
    55. <img src="${g.goodsImg}"/>
    56. <span class="abr">span>
    57. dt>
    58. <dd>${g.goodsName}dd>
    59. <dd><span>¥ ${g.goodsPrice}span>dd>
    60. dl>
    61. a>
    62. div>
    63. div>
    64. div>
    65. <a href="#" class="ad"><img src="img/ib1.jpg"/>a>
    66. <div class="people">
    67. < class="wrapper">
    68. <h2><img src="img/ih3.jpg"/>h2>
    69. <#if gt07?? && gt07?size gt 0>
    70. <#list gt07?keys as key>
    71. <div class="pList clearfix tran">
    72. <#list gt07[key] as g>
    73. <a href="${ctx}/goods/detail/${g.gid}">
    74. <dl>
    75. <dt>
    76. <span class="abl">span>
    77. <img src="${g.goodsImg}"/>
    78. <span class="abr">span>
    79. dt>
    80. <dd>${g.goodsName}dd>
    81. <dd><span>¥ ${g.goodsPrice}span>dd>
    82. dl>
    83. a>
    84. div>
    85. div>
    86. div>
    87. <#include "common/footer.html"/>
    88. <script src="js/public.js" type="text/javascript" charset="utf-8">script>
    89. <script src="js/nav.js" type="text/javascript" charset="utf-8">script>
    90. <script src="js/jquery.flexslider-min.js" type="text/javascript" charset="utf-8">script>
    91. <script type="text/javascript">
    92. $(function() {
    93. $('#home_slider').flexslider({
    94. animation: 'slide',
    95. controlNav: true,
    96. directionNav: true,
    97. animationLoop: true,
    98. slideshow: true,
    99. slideshowSpeed:2000,
    100. useCSS: false
    101. });
    102. });
    103. script>
    104. body>
    105. html>

    写一个方法写查询商品信息

    GoodsController 

    1. package com.cdl.spbootpro.controller;
    2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    3. import com.cdl.spbootpro.model.Goods;
    4. import com.cdl.spbootpro.service.IGoodsService;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.web.bind.annotation.PathVariable;
    7. import org.springframework.web.bind.annotation.RequestMapping;
    8. import org.springframework.web.bind.annotation.RestController;
    9. import org.springframework.web.servlet.ModelAndView;
    10. /**
    11. *

    12. * 商品信息表 前端控制器
    13. *

    14. *
    15. * @author cdl
    16. * @since 2022-11-05
    17. */
    18. @RestController
    19. @RequestMapping("/goods")
    20. public class GoodsController {
    21. @Autowired
    22. private IGoodsService goodsService;
    23. @RequestMapping("/detail/{gid}")
    24. public ModelAndView detail(@PathVariable("gid") long gid){
    25. Goods goods = goodsService.getOne(new QueryWrapper().eq("gid", gid));
    26. ModelAndView mv = new ModelAndView();
    27. mv.addObject("goods",goods);
    28. mv.setViewName("proDetail.html");
    29. return mv;
    30. }
    31. }

     proDetail.html

    1. html>
    2. <html>
    3. <head>
    4. <#include "common/head.html">
    5. <link rel="stylesheet" type="text/css" href="css/public.css"/>
    6. <link rel="stylesheet" type="text/css" href="css/proList.css"/>
    7. head>
    8. <body>
    9. <#include "common/top.html">
    10. <div class="address">
    11. <div class="wrapper clearfix">
    12. <a href="${ctx}/">首页a>
    13. <span>/span>
    14. <a href="${ctx}/page/flowerDer.html">装饰摆件a>
    15. <span>/span>
    16. <a href="${ctx}/page/proList.html">干花花艺a>
    17. <span>/span>
    18. <#--
    19. 注意:
    20. 1)${goods.goodsTitle!}:只能判断goodsTitle属性是否为空,不能判断goods对象是否为空
    21. 2)${(goods.goodsTitle)!}:既可以判断goods对象是否为空,也可以判断goodsTitle属性是否为空
    22. -->
    23. <a href="#" class="on">【最家】非洲菊仿真花干花a>
    24. div>
    25. div>
    26. <div class="detCon">
    27. <div class="proDet wrapper">
    28. <div class="proCon clearfix">
    29. <div class="proImg fl">
    30. <#-- 360 -->
    31. <img class="det" src="${goods.goodsImg}" />
    32. div>
    33. <div class="fr intro">
    34. <div class="title">
    35. <input type="hidden" id="gids" value="${goods.gid}">
    36. <h4>【最家】${goods.goodsName}h4>
    37. <p>${goods.goodsDetail}p>
    38. <span>¥${goods.goodsPrice}span>
    39. div>
    40. <div class="proIntro">
    41. <p>颜色分类p>
    42. <div class="smallImg clearfix categ">
    43. <p class="fl"><img src="img/temp/prosmall01.jpg" alt="白瓷花瓶+20支快乐花" data-src="img/temp/proBig01.jpg">p>
    44. <p class="fl"><img src="img/temp/prosmall02.jpg" alt="白瓷花瓶+20支兔尾巴草" data-src="img/temp/proBig02.jpg">p>
    45. <p class="fl"><img src="img/temp/prosmall03.jpg" alt="20支快乐花" data-src="img/temp/proBig03.jpg">p>
    46. <p class="fl"><img src="img/temp/prosmall04.jpg" alt="20支兔尾巴草" data-src="img/temp/proBig04.jpg">p>
    47. div>
    48. <p>数量  库存<span>${goods.goodsStock}span>件p>
    49. <div class="num clearfix">
    50. <img class="fl sub" src="img/temp/sub.jpg">
    51. <span class="fl" contentEditable="true">1span>
    52. <img class="fl add" src="img/temp/add.jpg">
    53. <p class="please fl">请选择商品属性!p>
    54. div>
    55. div>
    56. <div class="btns clearfix">
    57. <a href="#2"><p class="buy fl">立即购买p>a>
    58. <a href="javascript:void(0);"><p class="cart fr">加入购物车p>a>
    59. div>
    60. div>
    61. div>
    62. div>
    63. div>
    64. <div class="introMsg wrapper clearfix">
    65. <div class="msgL fl">
    66. <div class="msgTit clearfix">
    67. <a class="on">商品详情a>
    68. <a>所有评价a>
    69. div>
    70. <div class="msgAll">
    71. <div class="msgImgs">
    72. <img src="img/temp/det01.jpg">
    73. <img src="img/temp/det02.jpg">
    74. <img src="img/temp/det03.jpg">
    75. <img src="img/temp/det04.jpg">
    76. <img src="img/temp/det05.jpg">
    77. <img src="img/temp/det06.jpg">
    78. <img src="img/temp/det07.jpg">
    79. div>
    80. <div class="eva">
    81. <div class="per clearfix">
    82. <img class="fl" src="img/temp/per01.jpg">
    83. <div class="perR fl">
    84. <p>馨***呀p>
    85. <p>不好意思评价晚了,产品很好,价格比玻璃品便宜,没有我担心的杂色,发货快,包装好,全5分p>
    86. <div class="clearfix">
    87. <p><img src="img/temp/eva01.jpg">p>
    88. <p><img src="img/temp/eva02.jpg">p>
    89. <p><img src="img/temp/eva03.jpg">p>
    90. <p><img src="img/temp/eva04.jpg">p>
    91. <p><img src="img/temp/eva05.jpg">p>
    92. div>
    93. <p><span>2016年12月27日08:31span><span>颜色分类:大中小三件套(不含花)span>p>
    94. div>
    95. div>
    96. <div class="per clearfix">
    97. <img class="fl" src="img/temp/per02.jpg">
    98. <div class="perR fl">
    99. <p>么***周p>
    100. <p>花瓶超级棒,我看图以为是光面的,收货发现是磨砂,但感觉也超有质感,很喜欢。磨砂上面还有点纹路,不过觉得挺自然的,不影响美观。包装也很好,绝对不会磕碎碰坏,好评!p>
    101. <p><span>2016年12月27日08:31span><span>颜色分类:大中小三件套(不含花)span>p>
    102. div>
    103. div>
    104. <div class="per clearfix">
    105. <img class="fl" src="img/temp/per01.jpg">
    106. <div class="perR fl">
    107. <p>馨***呀p>
    108. <p>不好意思评价晚了,产品很好,价格比玻璃品便宜,没有我担心的杂色,发货快,包装好,全5分p>
    109. <div class="clearfix">
    110. <p><img src="img/temp/eva01.jpg">p>
    111. <p><img src="img/temp/eva02.jpg">p>
    112. <p><img src="img/temp/eva03.jpg">p>
    113. <p><img src="img/temp/eva04.jpg">p>
    114. <p><img src="img/temp/eva05.jpg">p>
    115. div>
    116. <p><span>2016年12月27日08:31span><span>颜色分类:大中小三件套(不含花)span>p>
    117. div>
    118. div>
    119. <div class="per clearfix">
    120. <img class="fl" src="img/temp/per02.jpg">
    121. <div class="perR fl">
    122. <p>么***周p>
    123. <p>花瓶超级棒,我看图以为是光面的,收货发现是磨砂,但感觉也超有质感,很喜欢。磨砂上面还有点纹路,不过觉得挺自然的,不影响美观。包装也很好,绝对不会磕碎碰坏,好评!p>
    124. <p><span>2016年12月27日08:31span><span>颜色分类:大中小三件套(不含花)span>p>
    125. div>
    126. div>
    127. <div class="per clearfix">
    128. <img class="fl" src="img/temp/per01.jpg">
    129. <div class="perR fl">
    130. <p>馨***呀p>
    131. <p>不好意思评价晚了,产品很好,价格比玻璃品便宜,没有我担心的杂色,发货快,包装好,全5分p>
    132. <div class="clearfix">
    133. <p><img src="img/temp/eva01.jpg">p>
    134. <p><img src="img/temp/eva02.jpg">p>
    135. <p><img src="img/temp/eva03.jpg">p>
    136. <p><img src="img/temp/eva04.jpg">p>
    137. <p><img src="img/temp/eva05.jpg">p>
    138. div>
    139. <p><span>2016年12月27日08:31span><span>颜色分类:大中小三件套(不含花)span>p>
    140. div>
    141. div>
    142. <div class="per clearfix">
    143. <img class="fl" src="img/temp/per02.jpg">
    144. <div class="perR fl">
    145. <p>么***周p>
    146. <p>花瓶超级棒,我看图以为是光面的,收货发现是磨砂,但感觉也超有质感,很喜欢。磨砂上面还有点纹路,不过觉得挺自然的,不影响美观。包装也很好,绝对不会磕碎碰坏,好评!p>
    147. <p><span>2016年12月27日08:31span><span>颜色分类:大中小三件套(不含花)span>p>
    148. div>
    149. div>
    150. <div class="per clearfix">
    151. <img class="fl" src="img/temp/per01.jpg">
    152. <div class="perR fl">
    153. <p>馨***呀p>
    154. <p>不好意思评价晚了,产品很好,价格比玻璃品便宜,没有我担心的杂色,发货快,包装好,全5分p>
    155. <div class="clearfix">
    156. <p><img src="img/temp/eva01.jpg">p>
    157. <p><img src="img/temp/eva02.jpg">p>
    158. <p><img src="img/temp/eva03.jpg">p>
    159. <p><img src="img/temp/eva04.jpg">p>
    160. <p><img src="img/temp/eva05.jpg">p>
    161. div>
    162. <p><span>2016年12月27日08:31span><span>颜色分类:大中小三件套(不含花)span>p>
    163. div>
    164. div>
    165. <div class="per clearfix">
    166. <img class="fl" src="img/temp/per02.jpg">
    167. <div class="perR fl">
    168. <p>么***周p>
    169. <p>花瓶超级棒,我看图以为是光面的,收货发现是磨砂,但感觉也超有质感,很喜欢。磨砂上面还有点纹路,不过觉得挺自然的,不影响美观。包装也很好,绝对不会磕碎碰坏,好评!p>
    170. <p><span>2016年12月27日08:31span><span>颜色分类:大中小三件套(不含花)span>p>
    171. div>
    172. div>
    173. <div class="per clearfix">
    174. <img class="fl" src="img/temp/per01.jpg">
    175. <div class="perR fl">
    176. <p>馨***呀p>
    177. <p>不好意思评价晚了,产品很好,价格比玻璃品便宜,没有我担心的杂色,发货快,包装好,全5分p>
    178. <div class="clearfix">
    179. <p><img src="img/temp/eva01.jpg">p>
    180. <p><img src="img/temp/eva02.jpg">p>
    181. <p><img src="img/temp/eva03.jpg">p>
    182. <p><img src="img/temp/eva04.jpg">p>
    183. <p><img src="img/temp/eva05.jpg">p>
    184. div>
    185. <p><span>2016年12月27日08:31span><span>颜色分类:大中小三件套(不含花)span>p>
    186. div>
    187. div>
    188. <div class="per clearfix">
    189. <img class="fl" src="img/temp/per02.jpg">
    190. <div class="perR fl">
    191. <p>么***周p>
    192. <p>花瓶超级棒,我看图以为是光面的,收货发现是磨砂,但感觉也超有质感,很喜欢。磨砂上面还有点纹路,不过觉得挺自然的,不影响美观。包装也很好,绝对不会磕碎碰坏,好评!p>
    193. <p><span>2016年12月27日08:31span><span>颜色分类:大中小三件套(不含花)span>p>
    194. div>
    195. div>
    196. div>
    197. div>
    198. div>
    199. <div class="msgR fr">
    200. <h4>为你推荐h4>
    201. <div class="seeList">
    202. <a href="#">
    203. <dl>
    204. <dt><img src="img/temp/see01.jpg">dt>
    205. <dd>【最家】复古文艺风玻璃花瓶dd>
    206. <dd>¥193.20dd>
    207. dl>
    208. a>
    209. <a href="#">
    210. <dl>
    211. <dt><img src="img/temp/see02.jpg">dt>
    212. <dd>【最家】复古文艺风玻璃花瓶dd>
    213. <dd>¥193.20dd>
    214. dl>
    215. a>
    216. <a href="#">
    217. <dl>
    218. <dt><img src="img/temp/see03.jpg">dt>
    219. <dd>【最家】复古文艺风玻璃花瓶dd>
    220. <dd>¥193.20dd>
    221. dl>
    222. a>
    223. <a href="#">
    224. <dl>
    225. <dt><img src="img/temp/see04.jpg">dt>
    226. <dd>【最家】复古文艺风玻璃花瓶dd>
    227. <dd>¥193.20dd>
    228. dl>
    229. a>
    230. div>
    231. div>
    232. div>
    233. <div class="like">
    234. <h4>猜你喜欢h4>
    235. <div class="bottom">
    236. <div class="hd">
    237. <span class="prev"><img src="img/temp/prev.png">span>
    238. <span class="next"><img src="img/temp/next.png">span>
    239. div>
    240. <div class="imgCon bd">
    241. <div class="likeList clearfix">
    242. <div>
    243. <a href="${ctx}/page/proDetail.html">
    244. <dl>
    245. <dt><img src="img/temp/like01.jpg">dt>
    246. <dd>【最家】复古文艺风玻璃花瓶dd>
    247. <dd>¥193.20dd>
    248. dl>
    249. a>
    250. <a href="${ctx}/page/proDetail.html">
    251. <dl>
    252. <dt><img src="img/temp/like02.jpg">dt>
    253. <dd>【最家】复古文艺风玻璃花瓶dd>
    254. <dd>¥193.20dd>
    255. dl>
    256. a>
    257. <a href="${ctx}/page/proDetail.html">
    258. <dl>
    259. <dt><img src="img/temp/like03.jpg">dt>
    260. <dd>【最家】复古文艺风玻璃花瓶dd>
    261. <dd>¥193.20dd>
    262. dl>
    263. a>
    264. <a href="${ctx}/page/proDetail.html">
    265. <dl>
    266. <dt><img src="img/temp/like04.jpg">dt>
    267. <dd>【最家】复古文艺风玻璃花瓶dd>
    268. <dd>¥193.20dd>
    269. dl>
    270. a>
    271. <a href="${ctx}/page/proDetail.html" class="last">
    272. <dl>
    273. <dt><img src="img/temp/like05.jpg">dt>
    274. <dd>【最家】复古文艺风玻璃花瓶dd>
    275. <dd>¥193.20dd>
    276. dl>
    277. a>
    278. div>
    279. <div>
    280. <a href="${ctx}/page/proDetail.html">
    281. <dl>
    282. <dt><img src="img/temp/like01.jpg">dt>
    283. <dd>【最家】复古文艺风玻璃花瓶dd>
    284. <dd>¥193.20dd>
    285. dl>
    286. a>
    287. <a href="${ctx}/page/proDetail.html">
    288. <dl>
    289. <dt><img src="img/temp/like02.jpg">dt>
    290. <dd>【最家】复古文艺风玻璃花瓶dd>
    291. <dd>¥193.20dd>
    292. dl>
    293. a>
    294. <a href="${ctx}/page/proDetail.html">
    295. <dl>
    296. <dt><img src="img/temp/like03.jpg">dt>
    297. <dd>【最家】复古文艺风玻璃花瓶dd>
    298. <dd>¥193.20dd>
    299. dl>
    300. a>
    301. <a href="${ctx}/page/proDetail.html">
    302. <dl>
    303. <dt><img src="img/temp/like04.jpg">dt>
    304. <dd>【最家】复古文艺风玻璃花瓶dd>
    305. <dd>¥193.20dd>
    306. dl>
    307. a>
    308. <a href="${ctx}/page/proDetail.html" class="last">
    309. <dl>
    310. <dt><img src="img/temp/like05.jpg">dt>
    311. <dd>【最家】复古文艺风玻璃花瓶dd>
    312. <dd>¥193.20dd>
    313. dl>
    314. a>
    315. div>
    316. div>
    317. div>
    318. div>
    319. div>
    320. <#include "common/footer.html">
    321. <script src="js/jquery.SuperSlide.2.1.1.js" type="text/javascript" charset="utf-8">script>
    322. <script src="js/public.js" type="text/javascript" charset="utf-8">script>
    323. <script src="js/nav.js" type="text/javascript" charset="utf-8">script>
    324. <script src="js/pro.js" type="text/javascript" charset="utf-8">script>
    325. <script src="js/cart.js" type="text/javascript" charset="utf-8">script>
    326. <script type="text/javascript">
    327. jQuery(".bottom").slide({titCell:".hd ul",mainCell:".bd .likeList",autoPage:true,autoPlay:false,effect:"leftLoop",autoPlay:true,vis:1});
    328. script>
    329. body>
    330. html>

    三、购物车查询以及新增的前台

    给加入购物车添加点击事件

     proDetail.html

    1. html>
    2. <html>
    3. <head>
    4. <#include "common/head.html">
    5. <link rel="stylesheet" type="text/css" href="css/public.css"/>
    6. <link rel="stylesheet" type="text/css" href="css/proList.css"/>
    7. head>
    8. <body>
    9. <#include "common/top.html">
    10. <div class="address">
    11. <div class="wrapper clearfix">
    12. <a href="${ctx}/">首页a>
    13. <span>/span>
    14. <a href="${ctx}/page/flowerDer.html">装饰摆件a>
    15. <span>/span>
    16. <a href="${ctx}/page/proList.html">干花花艺a>
    17. <span>/span>
    18. <#--
    19. 注意:
    20. 1)${goods.goodsTitle!}:只能判断goodsTitle属性是否为空,不能判断goods对象是否为空
    21. 2)${(goods.goodsTitle)!}:既可以判断goods对象是否为空,也可以判断goodsTitle属性是否为空
    22. -->
    23. <a href="#" class="on">【最家】非洲菊仿真花干花a>
    24. div>
    25. div>
    26. <div class="detCon">
    27. <div class="proDet wrapper">
    28. <div class="proCon clearfix">
    29. <div class="proImg fl">
    30. <#-- 360 -->
    31. <img class="det" src="${goods.goodsImg}" />
    32. div>
    33. <div class="fr intro">
    34. <div class="title">
    35. <input type="hidden" id="gids" value="${goods.gid}">
    36. <h4>【最家】${goods.goodsName}h4>
    37. <p>${goods.goodsDetail}p>
    38. <span>¥${goods.goodsPrice}span>
    39. div>
    40. <div class="proIntro">
    41. <p>颜色分类p>
    42. <div class="smallImg clearfix categ">
    43. <p class="fl"><img src="img/temp/prosmall01.jpg" alt="白瓷花瓶+20支快乐花" data-src="img/temp/proBig01.jpg">p>
    44. <p class="fl"><img src="img/temp/prosmall02.jpg" alt="白瓷花瓶+20支兔尾巴草" data-src="img/temp/proBig02.jpg">p>
    45. <p class="fl"><img src="img/temp/prosmall03.jpg" alt="20支快乐花" data-src="img/temp/proBig03.jpg">p>
    46. <p class="fl"><img src="img/temp/prosmall04.jpg" alt="20支兔尾巴草" data-src="img/temp/proBig04.jpg">p>
    47. div>
    48. <p>数量  库存<span>${goods.goodsStock}span>件p>
    49. <div class="num clearfix">
    50. <img class="fl sub" src="img/temp/sub.jpg">
    51. <span class="fl" contentEditable="true">1span>
    52. <img class="fl add" src="img/temp/add.jpg">
    53. <p class="please fl">请选择商品属性!p>
    54. div>
    55. div>
    56. <div class="btns clearfix">
    57. <a href="#2"><p class="buy fl">立即购买p>a>
    58. <a href="javascript:void(0);"><p class="cart fr">加入购物车p>a>
    59. div>
    60. div>
    61. div>
    62. div>
    63. div>
    64. <div class="introMsg wrapper clearfix">
    65. <div class="msgL fl">
    66. <div class="msgTit clearfix">
    67. <a class="on">商品详情a>
    68. <a>所有评价a>
    69. div>
    70. <div class="msgAll">
    71. <div class="msgImgs">
    72. <img src="img/temp/det01.jpg">
    73. <img src="img/temp/det02.jpg">
    74. <img src="img/temp/det03.jpg">
    75. <img src="img/temp/det04.jpg">
    76. <img src="img/temp/det05.jpg">
    77. <img src="img/temp/det06.jpg">
    78. <img src="img/temp/det07.jpg">
    79. div>
    80. <div class="eva">
    81. <div class="per clearfix">
    82. <img class="fl" src="img/temp/per01.jpg">
    83. <div class="perR fl">
    84. <p>馨***呀p>
    85. <p>不好意思评价晚了,产品很好,价格比玻璃品便宜,没有我担心的杂色,发货快,包装好,全5分p>
    86. <div class="clearfix">
    87. <p><img src="img/temp/eva01.jpg">p>
    88. <p><img src="img/temp/eva02.jpg">p>
    89. <p><img src="img/temp/eva03.jpg">p>
    90. <p><img src="img/temp/eva04.jpg">p>
    91. <p><img src="img/temp/eva05.jpg">p>
    92. div>
    93. <p><span>2016年12月27日08:31span><span>颜色分类:大中小三件套(不含花)span>p>
    94. div>
    95. div>
    96. <div class="per clearfix">
    97. <img class="fl" src="img/temp/per02.jpg">
    98. <div class="perR fl">
    99. <p>么***周p>
    100. <p>花瓶超级棒,我看图以为是光面的,收货发现是磨砂,但感觉也超有质感,很喜欢。磨砂上面还有点纹路,不过觉得挺自然的,不影响美观。包装也很好,绝对不会磕碎碰坏,好评!p>
    101. <p><span>2016年12月27日08:31span><span>颜色分类:大中小三件套(不含花)span>p>
    102. div>
    103. div>
    104. <div class="per clearfix">
    105. <img class="fl" src="img/temp/per01.jpg">
    106. <div class="perR fl">
    107. <p>馨***呀p>
    108. <p>不好意思评价晚了,产品很好,价格比玻璃品便宜,没有我担心的杂色,发货快,包装好,全5分p>
    109. <div class="clearfix">
    110. <p><img src="img/temp/eva01.jpg">p>
    111. <p><img src="img/temp/eva02.jpg">p>
    112. <p><img src="img/temp/eva03.jpg">p>
    113. <p><img src="img/temp/eva04.jpg">p>
    114. <p><img src="img/temp/eva05.jpg">p>
    115. div>
    116. <p><span>2016年12月27日08:31span><span>颜色分类:大中小三件套(不含花)span>p>
    117. div>
    118. div>
    119. <div class="per clearfix">
    120. <img class="fl" src="img/temp/per02.jpg">
    121. <div class="perR fl">
    122. <p>么***周p>
    123. <p>花瓶超级棒,我看图以为是光面的,收货发现是磨砂,但感觉也超有质感,很喜欢。磨砂上面还有点纹路,不过觉得挺自然的,不影响美观。包装也很好,绝对不会磕碎碰坏,好评!p>
    124. <p><span>2016年12月27日08:31span><span>颜色分类:大中小三件套(不含花)span>p>
    125. div>
    126. div>
    127. <div class="per clearfix">
    128. <img class="fl" src="img/temp/per01.jpg">
    129. <div class="perR fl">
    130. <p>馨***呀p>
    131. <p>不好意思评价晚了,产品很好,价格比玻璃品便宜,没有我担心的杂色,发货快,包装好,全5分p>
    132. <div class="clearfix">
    133. <p><img src="img/temp/eva01.jpg">p>
    134. <p><img src="img/temp/eva02.jpg">p>
    135. <p><img src="img/temp/eva03.jpg">p>
    136. <p><img src="img/temp/eva04.jpg">p>
    137. <p><img src="img/temp/eva05.jpg">p>
    138. div>
    139. <p><span>2016年12月27日08:31span><span>颜色分类:大中小三件套(不含花)span>p>
    140. div>
    141. div>
    142. <div class="per clearfix">
    143. <img class="fl" src="img/temp/per02.jpg">
    144. <div class="perR fl">
    145. <p>么***周p>
    146. <p>花瓶超级棒,我看图以为是光面的,收货发现是磨砂,但感觉也超有质感,很喜欢。磨砂上面还有点纹路,不过觉得挺自然的,不影响美观。包装也很好,绝对不会磕碎碰坏,好评!p>
    147. <p><span>2016年12月27日08:31span><span>颜色分类:大中小三件套(不含花)span>p>
    148. div>
    149. div>
    150. <div class="per clearfix">
    151. <img class="fl" src="img/temp/per01.jpg">
    152. <div class="perR fl">
    153. <p>馨***呀p>
    154. <p>不好意思评价晚了,产品很好,价格比玻璃品便宜,没有我担心的杂色,发货快,包装好,全5分p>
    155. <div class="clearfix">
    156. <p><img src="img/temp/eva01.jpg">p>
    157. <p><img src="img/temp/eva02.jpg">p>
    158. <p><img src="img/temp/eva03.jpg">p>
    159. <p><img src="img/temp/eva04.jpg">p>
    160. <p><img src="img/temp/eva05.jpg">p>
    161. div>
    162. <p><span>2016年12月27日08:31span><span>颜色分类:大中小三件套(不含花)span>p>
    163. div>
    164. div>
    165. <div class="per clearfix">
    166. <img class="fl" src="img/temp/per02.jpg">
    167. <div class="perR fl">
    168. <p>么***周p>
    169. <p>花瓶超级棒,我看图以为是光面的,收货发现是磨砂,但感觉也超有质感,很喜欢。磨砂上面还有点纹路,不过觉得挺自然的,不影响美观。包装也很好,绝对不会磕碎碰坏,好评!p>
    170. <p><span>2016年12月27日08:31span><span>颜色分类:大中小三件套(不含花)span>p>
    171. div>
    172. div>
    173. <div class="per clearfix">
    174. <img class="fl" src="img/temp/per01.jpg">
    175. <div class="perR fl">
    176. <p>馨***呀p>
    177. <p>不好意思评价晚了,产品很好,价格比玻璃品便宜,没有我担心的杂色,发货快,包装好,全5分p>
    178. <div class="clearfix">
    179. <p><img src="img/temp/eva01.jpg">p>
    180. <p><img src="img/temp/eva02.jpg">p>
    181. <p><img src="img/temp/eva03.jpg">p>
    182. <p><img src="img/temp/eva04.jpg">p>
    183. <p><img src="img/temp/eva05.jpg">p>
    184. div>
    185. <p><span>2016年12月27日08:31span><span>颜色分类:大中小三件套(不含花)span>p>
    186. div>
    187. div>
    188. <div class="per clearfix">
    189. <img class="fl" src="img/temp/per02.jpg">
    190. <div class="perR fl">
    191. <p>么***周p>
    192. <p>花瓶超级棒,我看图以为是光面的,收货发现是磨砂,但感觉也超有质感,很喜欢。磨砂上面还有点纹路,不过觉得挺自然的,不影响美观。包装也很好,绝对不会磕碎碰坏,好评!p>
    193. <p><span>2016年12月27日08:31span><span>颜色分类:大中小三件套(不含花)span>p>
    194. div>
    195. div>
    196. div>
    197. div>
    198. div>
    199. <div class="msgR fr">
    200. <h4>为你推荐h4>
    201. <div class="seeList">
    202. <a href="#">
    203. <dl>
    204. <dt><img src="img/temp/see01.jpg">dt>
    205. <dd>【最家】复古文艺风玻璃花瓶dd>
    206. <dd>¥193.20dd>
    207. dl>
    208. a>
    209. <a href="#">
    210. <dl>
    211. <dt><img src="img/temp/see02.jpg">dt>
    212. <dd>【最家】复古文艺风玻璃花瓶dd>
    213. <dd>¥193.20dd>
    214. dl>
    215. a>
    216. <a href="#">
    217. <dl>
    218. <dt><img src="img/temp/see03.jpg">dt>
    219. <dd>【最家】复古文艺风玻璃花瓶dd>
    220. <dd>¥193.20dd>
    221. dl>
    222. a>
    223. <a href="#">
    224. <dl>
    225. <dt><img src="img/temp/see04.jpg">dt>
    226. <dd>【最家】复古文艺风玻璃花瓶dd>
    227. <dd>¥193.20dd>
    228. dl>
    229. a>
    230. div>
    231. div>
    232. div>
    233. <div class="like">
    234. <h4>猜你喜欢h4>
    235. <div class="bottom">
    236. <div class="hd">
    237. <span class="prev"><img src="img/temp/prev.png">span>
    238. <span class="next"><img src="img/temp/next.png">span>
    239. div>
    240. <div class="imgCon bd">
    241. <div class="likeList clearfix">
    242. <div>
    243. <a href="${ctx}/page/proDetail.html">
    244. <dl>
    245. <dt><img src="img/temp/like01.jpg">dt>
    246. <dd>【最家】复古文艺风玻璃花瓶dd>
    247. <dd>¥193.20dd>
    248. dl>
    249. a>
    250. <a href="${ctx}/page/proDetail.html">
    251. <dl>
    252. <dt><img src="img/temp/like02.jpg">dt>
    253. <dd>【最家】复古文艺风玻璃花瓶dd>
    254. <dd>¥193.20dd>
    255. dl>
    256. a>
    257. <a href="${ctx}/page/proDetail.html">
    258. <dl>
    259. <dt><img src="img/temp/like03.jpg">dt>
    260. <dd>【最家】复古文艺风玻璃花瓶dd>
    261. <dd>¥193.20dd>
    262. dl>
    263. a>
    264. <a href="${ctx}/page/proDetail.html">
    265. <dl>
    266. <dt><img src="img/temp/like04.jpg">dt>
    267. <dd>【最家】复古文艺风玻璃花瓶dd>
    268. <dd>¥193.20dd>
    269. dl>
    270. a>
    271. <a href="${ctx}/page/proDetail.html" class="last">
    272. <dl>
    273. <dt><img src="img/temp/like05.jpg">dt>
    274. <dd>【最家】复古文艺风玻璃花瓶dd>
    275. <dd>¥193.20dd>
    276. dl>
    277. a>
    278. div>
    279. <div>
    280. <a href="${ctx}/page/proDetail.html">
    281. <dl>
    282. <dt><img src="img/temp/like01.jpg">dt>
    283. <dd>【最家】复古文艺风玻璃花瓶dd>
    284. <dd>¥193.20dd>
    285. dl>
    286. a>
    287. <a href="${ctx}/page/proDetail.html">
    288. <dl>
    289. <dt><img src="img/temp/like02.jpg">dt>
    290. <dd>【最家】复古文艺风玻璃花瓶dd>
    291. <dd>¥193.20dd>
    292. dl>
    293. a>
    294. <a href="${ctx}/page/proDetail.html">
    295. <dl>
    296. <dt><img src="img/temp/like03.jpg">dt>
    297. <dd>【最家】复古文艺风玻璃花瓶dd>
    298. <dd>¥193.20dd>
    299. dl>
    300. a>
    301. <a href="${ctx}/page/proDetail.html">
    302. <dl>
    303. <dt><img src="img/temp/like04.jpg">dt>
    304. <dd>【最家】复古文艺风玻璃花瓶dd>
    305. <dd>¥193.20dd>
    306. dl>
    307. a>
    308. <a href="${ctx}/page/proDetail.html" class="last">
    309. <dl>
    310. <dt><img src="img/temp/like05.jpg">dt>
    311. <dd>【最家】复古文艺风玻璃花瓶dd>
    312. <dd>¥193.20dd>
    313. dl>
    314. a>
    315. div>
    316. div>
    317. div>
    318. div>
    319. div>
    320. <#include "common/footer.html">
    321. <script src="js/jquery.SuperSlide.2.1.1.js" type="text/javascript" charset="utf-8">script>
    322. <script src="js/public.js" type="text/javascript" charset="utf-8">script>
    323. <script src="js/nav.js" type="text/javascript" charset="utf-8">script>
    324. <script src="js/pro.js" type="text/javascript" charset="utf-8">script>
    325. <script src="js/cart.js" type="text/javascript" charset="utf-8">script>
    326. <script type="text/javascript">
    327. jQuery(".bottom").slide({titCell:".hd ul",mainCell:".bd .likeList",autoPage:true,autoPlay:false,effect:"leftLoop",autoPlay:true,vis:1});
    328. $(function () {
    329. $(".cart").click(function () {
    330. $.get('/shopCar/add',{gid:$("#gids").val()},function(rs){
    331. if(rs.code!=200){
    332. alert('请先登录后再购买商品!');
    333. }else
    334. location.href='/shopCar/queryShopCar';
    335. },'json');
    336. });
    337. })
    338. script>
    339. body>
    340. html>

    从商品详情页选好分类 点击加入购物车

    跳转至图下的购物车界面 此时的数据都是定死的 

     将数据库的数据绑定到展示界面上

    cart.html

    1. html>
    2. <html>
    3. <head lang="en">
    4. <#include "common/head.html">
    5. <link rel="stylesheet" type="text/css" href="css/public.css"/>
    6. <link rel="stylesheet" type="text/css" href="css/proList.css" />
    7. head>
    8. <body>
    9. <div class="head ding">
    10. <div class="wrapper clearfix">
    11. <div class="clearfix" id="top">
    12. <h1 class="fl"><a href="${ctx}/"><img src="img/logo.png"/>a>h1>
    13. <div class="fr clearfix" id="top1">
    14. <form action="#" method="get" class="fl">
    15. <input type="text" placeholder="搜索" />
    16. <input type="button" />
    17. form>
    18. div>
    19. div>
    20. div>
    21. div>
    22. <div class="cart mt">
    23. <div class="site">
    24. <p class=" wrapper clearfix">
    25. <span class="fl">购物车span>
    26. <img class="top" src="img/temp/cartTop01.png">
    27. <a href="${ctx}/" class="fr">继续购物>a>
    28. p>
    29. div>
    30. <div class="table wrapper">
    31. <div class="tr">
    32. <div>商品div>
    33. <div>单价div>
    34. <div>数量div>
    35. <div>小计div>
    36. <div>操作div>
    37. div>
    38. <#if shopCar??>
    39. <#list shopCar.items as g>
    40. <div class="th">
    41. <div class="pro clearfix">
    42. <label class="fl">
    43. <input type="hidden" value="${g.gid!}"/>
    44. <input type="checkbox"/>
    45. <span>span>
    46. label>
    47. <a class="fl" href="#">
    48. <dl class="clearfix">
    49. <dt class="fl"><img style="width: 120px;height: 120px;" src="${g.goodsImg}">dt>
    50. <dd class="fl">
    51. <p>${g.goodsName}p>
    52. <p>颜色分类:p>
    53. <p>白色瓷瓶+白色串枚p>
    54. dd>
    55. dl>
    56. a>
    57. div>
    58. <div class="price">¥${g.goodsPrice}div>
    59. <div class="number">
    60. <p class="num clearfix">
    61. <img class="fl sub" src="img/temp/sub.jpg">
    62. <span class="fl">${g.quantity}span>
    63. <img class="fl add" src="img/temp/add.jpg">
    64. p>
    65. div>
    66. <div class="price sAll">¥${g.smalltotal()}div>
    67. <div class="price"><a class="del" href="javascript:void(0)">删除a>div>
    68. div>
    69. <div class="goOn">空空如也~<a href="${ctx}/">去逛逛a>div>
    70. <div class="tr clearfix">
    71. <label class="fl">
    72. <input class="checkAll" type="checkbox"/>
    73. <span>span>
    74. label>
    75. <p class="fl">
    76. <a href="javascript:void(0);">全选a>
    77. <a href="javascript:void(0);" class="del">删除a>
    78. p>
    79. <p class="fr">
    80. <span><small id="sl">0small>件商品span>
    81. <span>合计: <small id="all">¥0.00small>span>
    82. <a class="count">结算a>
    83. p>
    84. div>
    85. div>
    86. div>
    87. <div class="mask">div>
    88. <div class="tipDel">
    89. <p>确定要删除该商品吗?p>
    90. <p class="clearfix">
    91. <a class="fl cer" href="javascript:void(0);">确定a>
    92. <a class="fr cancel" href="javascript:void(0);">取消a>
    93. p>
    94. div>
    95. <#include "common/footer.html">
    96. <div class="mask">div>
    97. <div class="proDets">
    98. <img class="off" src="img/temp/off.jpg" />
    99. <div class="proCon clearfix">
    100. <div class="proImg fr">
    101. <img class="list" src="img/temp/proDet.jpg" />
    102. <div class="smallImg clearfix">
    103. <img src="img/temp/proDet01.jpg" data-src="img/temp/proDet01_big.jpg">
    104. <img src="img/temp/proDet02.jpg" data-src="img/temp/proDet02_big.jpg">
    105. <img src="img/temp/proDet03.jpg" data-src="img/temp/proDet03_big.jpg">
    106. <img src="img/temp/proDet04.jpg" data-src="img/temp/proDet04_big.jpg">
    107. div>
    108. div>
    109. <div class="fl">
    110. <div class="proIntro change">
    111. <p>颜色分类p>
    112. <div class="smallImg clearfix">
    113. <p class="fl on"><img src="img/temp/prosmall01.jpg" alt="白瓷花瓶+20支快乐花" data-src="img/temp/proBig01.jpg">p>
    114. <p class="fl"><img src="img/temp/prosmall02.jpg" alt="白瓷花瓶+20支兔尾巴草" data-src="img/temp/proBig02.jpg">p>
    115. <p class="fl"><img src="img/temp/prosmall03.jpg" alt="20支快乐花" data-src="img/temp/proBig03.jpg">p>
    116. <p class="fl"><img src="img/temp/prosmall04.jpg" alt="20支兔尾巴草" data-src="img/temp/proBig04.jpg">p>
    117. div>
    118. div>
    119. <div class="changeBtn clearfix">
    120. <a href="#2" class="fl"><p class="buy">确认p>a>
    121. <a href="#2" class="fr"><p class="cart">取消p>a>
    122. div>
    123. div>
    124. div>
    125. div>
    126. <div class="pleaseC">
    127. <p>请选择宝贝p>
    128. <img class="off" src="img/temp/off.jpg" />
    129. div>
    130. <script src="js/public.js" type="text/javascript" charset="utf-8">script>
    131. <script src="js/pro.js" type="text/javascript" charset="utf-8">script>
    132. <script src="js/cart.js" type="text/javascript" charset="utf-8">script>
    133. body>
    134. html>

     从商品详情页面选择商品加入购物车

    四、购物车删除和修改的功能

    修改cart.js中的代码

    cart.js

    1. $(function(){
    2. /**************数量加减***************/
    3. $(".num .sub").click(function(){
    4. var num = parseInt($(this).siblings("span").text());
    5. if(num<=1){
    6. $(this).attr("disabled","disabled");
    7. }else{
    8. num--;
    9. $(this).siblings("span").text(num);
    10. //获取除了货币符号以外的数字
    11. var price = $(this).parents(".number").prev().text().substring(1);
    12. //单价和数量相乘并保留两位小数
    13. $(this).parents(".th").find(".sAll").text('¥'+(num*price).toFixed(2));
    14. jisuan();
    15. zg();
    16. //TODO 获取当前行的行索引
    17. let index = $(this).parents(".th").index()-1;
    18. //获取当前的checkbox中设置的隐藏域(包含了商品ID)
    19. let gid=$(".th").eq(index).find('div:eq(0) input[type=hidden]').val();
    20. update(num,gid);
    21. }
    22. });
    23. $(".num .add").click(function(){
    24. var num = parseInt($(this).siblings("span").text());
    25. if(num>=5){
    26. confirm("限购5件");
    27. }else{
    28. num++;
    29. $(this).siblings("span").text(num);
    30. var price = $(this).parents(".number").prev().text().substring(1);
    31. $(this).parents(".th").find(".sAll").text('¥'+(num*price).toFixed(2));
    32. jisuan();
    33. zg();
    34. //TODO 获取当前行的行索引
    35. let index = $(this).parents(".th").index()-1;
    36. //获取当前的checkbox中设置的隐藏域(包含了商品ID)
    37. let gid=$(".th").eq(index).find('div:eq(0) input[type=hidden]').val();
    38. update(num,gid);
    39. }
    40. });
    41. //计算总价
    42. function jisuan(){
    43. var all=0;
    44. var len =$(".th input[type='checkbox']:checked").length;
    45. if(len==0){
    46. $("#all").text('¥'+parseFloat(0).toFixed(2));
    47. }else{
    48. $(".th input[type='checkbox']:checked").each(function(){
    49. //获取小计里的数值
    50. var sAll = $(this).parents(".pro").siblings('.sAll').text().substring(1);
    51. //累加
    52. all+=parseFloat(sAll);
    53. //赋值
    54. $("#all").text('¥'+all.toFixed(2));
    55. })
    56. }
    57. }
    58. //计算总共几件商品
    59. function zg(){
    60. var zsl = 0;
    61. var index = $(".th input[type='checkbox']:checked").parents(".th").find(".num span");
    62. var len =index.length;
    63. if(len==0){
    64. $("#sl").text(0);
    65. }else{
    66. index.each(function(){
    67. zsl+=parseInt($(this).text());
    68. $("#sl").text(zsl);
    69. })
    70. }
    71. if($("#sl").text()>0){
    72. $(".count").css("background","#c10000");
    73. }else{
    74. $(".count").css("background","#8e8e8e");
    75. }
    76. }
    77. /*****************商品全选***********************/
    78. $("input[type='checkbox']").on('click',function(){
    79. var sf = $(this).is(":checked");
    80. var sc= $(this).hasClass("checkAll");
    81. if(sf){
    82. if(sc){
    83. $("input[type='checkbox']").each(function(){
    84. this.checked=true;
    85. });
    86. zg();
    87. jisuan();
    88. }else{
    89. $(this).checked=true;
    90. var len = $("input[type='checkbox']:checked").length;
    91. var len1 = $("input").length-1;
    92. if(len==len1){
    93. $("input[type='checkbox']").each(function(){
    94. this.checked=true;
    95. });
    96. }
    97. zg();
    98. jisuan();
    99. }
    100. }else{
    101. if(sc){
    102. $("input[type='checkbox']").each(function(){
    103. this.checked=false;
    104. });
    105. zg();
    106. jisuan();
    107. }else{
    108. $(this).checked=false;
    109. var len = $(".th input[type='checkbox']:checked").length;
    110. var len1 = $("input").length-1;
    111. if(len
    112. $('.checkAll').attr("checked",false);
    113. }
    114. zg();
    115. jisuan();
    116. }
    117. }
    118. });
    119. /****************************proDetail 加入购物车*******************************/
    120. $(".btns .cart").click(function(){
    121. if($(".categ p").hasClass("on")){
    122. var num = parseInt($(".num span").text());
    123. var num1 = parseInt($(".goCart span").text());
    124. $(".goCart span").text(num+num1);
    125. }
    126. });
    127. //删除购物车商品
    128. $('.del').click(function(){
    129. //定义商品id 1,2,3,4,5,6
    130. let gids = "";
    131. //单个删除
    132. if($(this).parent().parent().hasClass("th")){
    133. $(".mask").show();
    134. $(".tipDel").show();
    135. index = $(this).parents(".th").index()-1;
    136. //TODO 获取当前的checkbox中设置的隐藏域(包含了商品ID)
    137. gids=$(".th").eq(index).find('div:eq(0) input[type=hidden]').val();
    138. $('.cer').click(function(){
    139. $(".mask").hide();
    140. $(".tipDel").hide();
    141. $(".th").eq(index).remove();
    142. $('.cer').off('click');
    143. if($(".th").length==0){
    144. $(".table .goOn").show();
    145. }
    146. del(gids);
    147. })
    148. }else{
    149. //选中多个一起删除
    150. if($(".th input[type='checkbox']:checked").length==0){
    151. $(".mask").show();
    152. $(".pleaseC").show();
    153. }
    154. else{
    155. $(".mask").show();
    156. $(".tipDel").show();
    157. let gidarr = new Array();// {1,2,3,4,5,6}
    158. $(".th input[type='checkbox']:checked").each(function(j){
    159. gidarr.push($(".th").eq(index).find('div:eq(0) input[type=hidden]').val());
    160. // gids += $(".th").eq(index).find('div:eq(0) input[type=hidden]').val() + ",";
    161. });
    162. gids = gidarr.join(",");
    163. $('.cer').click(function(){
    164. $(".th input[type='checkbox']:checked").each(function(j){
    165. index = $(this).parents('.th').index()-1;
    166. $(".th").eq(index).remove();
    167. if($(".th").length==0){
    168. $(".table .goOn").show();
    169. }
    170. })
    171. $(".mask").hide();
    172. $(".tipDel").hide();
    173. zg();
    174. jisuan();
    175. del(gids);
    176. })
    177. }
    178. }
    179. })
    180. $('.cancel').click(function(){
    181. $(".mask").hide();
    182. $(".tipDel").hide();
    183. })
    184. //改变商品规格
    185. // $(".pro dd").hover(function(){
    186. // var html='';
    187. // html='修改';
    188. // $(this).addClass("on").append(html).parents(".th").siblings(".th").find(".pro dd").removeClass("on").find('.edit').remove();
    189. // $(".edit").each(function(i){
    190. // $(this).attr("id",'edit'+i);
    191. // $("#edit"+i).click(function(){
    192. // $(".proDets").show();
    193. // $(".mask").show();
    194. // $(".changeBtn .buy").attr("data-id",i);
    195. // })
    196. // })
    197. // },function(){
    198. // $(this).removeClass("on");
    199. // })
    200. // $(".changeBtn .buy").click(function(){
    201. // var index = $(this).attr("data-id");
    202. // var result = $(".smallImg .on").find("img").attr("alt");
    203. // $("#edit"+index).prev().text(result);
    204. // $(".proDets").hide();
    205. // $(".mask").hide();
    206. // $("#edit"+index).parent("dd").removeClass("on").find(".edit").remove();
    207. // });
    208. // $(".changeBtn .cart").click(function(){
    209. // $(".proDets").hide();
    210. // $(".mask").hide();
    211. // })
    212. })
    213. //删除商品
    214. function del(gids){
    215. $.post('/shopCar/delete',{
    216. 'gids':gids
    217. },function(rs){
    218. if(rs.code!=200)
    219. alert(rs.msg);
    220. else
    221. location.href='/shopCar/queryShopCar';
    222. },'json');
    223. }
    224. //更新商品数量
    225. function update(num,gid){
    226. $.post('/shopCar/update',{
    227. 'gid':gid,
    228. 'quantity':num
    229. },function(rs){
    230. if(rs.code!=200)
    231. alert(rs.msg);
    232. else
    233. location.href='/shopCar/queryShopCar';
    234. },'json');
    235. }

     cart.html

    1. html>
    2. <html>
    3. <head lang="en">
    4. <#include "common/head.html">
    5. <link rel="stylesheet" type="text/css" href="css/public.css"/>
    6. <link rel="stylesheet" type="text/css" href="css/proList.css" />
    7. head>
    8. <body>
    9. <div class="head ding">
    10. <div class="wrapper clearfix">
    11. <div class="clearfix" id="top">
    12. <h1 class="fl"><a href="${ctx}/"><img src="img/logo.png"/>a>h1>
    13. <div class="fr clearfix" id="top1">
    14. <form action="#" method="get" class="fl">
    15. <input type="text" placeholder="搜索" />
    16. <input type="button" />
    17. form>
    18. div>
    19. div>
    20. div>
    21. div>
    22. <div class="cart mt">
    23. <div class="site">
    24. <p class=" wrapper clearfix">
    25. <span class="fl">购物车span>
    26. <img class="top" src="img/temp/cartTop01.png">
    27. <a href="${ctx}/" class="fr">继续购物>a>
    28. p>
    29. div>
    30. <div class="table wrapper">
    31. <div class="tr">
    32. <div>商品div>
    33. <div>单价div>
    34. <div>数量div>
    35. <div>小计div>
    36. <div>操作div>
    37. div>
    38. <#if shopCar??>
    39. <#list shopCar.items as g>
    40. <div class="th">
    41. <div class="pro clearfix">
    42. <label class="fl">
    43. <input type="hidden" value="${g.gid!}"/>
    44. <input type="checkbox"/>
    45. <span>span>
    46. label>
    47. <a class="fl" href="#">
    48. <dl class="clearfix">
    49. <dt class="fl"><img style="width: 120px;height: 120px;" src="${g.goodsImg}">dt>
    50. <dd class="fl">
    51. <p>${g.goodsName}p>
    52. <p>颜色分类:p>
    53. <p>白色瓷瓶+白色串枚p>
    54. dd>
    55. dl>
    56. a>
    57. div>
    58. <div class="price">¥${g.goodsPrice}div>
    59. <div class="number">
    60. <p class="num clearfix">
    61. <img class="fl sub" src="img/temp/sub.jpg">
    62. <span class="fl">${g.quantity}span>
    63. <img class="fl add" src="img/temp/add.jpg">
    64. p>
    65. div>
    66. <div class="price sAll">¥${g.smalltotal()}div>
    67. <div class="price"><a class="del" href="javascript:void(0)">删除a>div>
    68. div>
    69. <div class="goOn">空空如也~<a href="${ctx}/">去逛逛a>div>
    70. <div class="tr clearfix">
    71. <label class="fl">
    72. <input class="checkAll" type="checkbox"/>
    73. <span>span>
    74. label>
    75. <p class="fl">
    76. <a href="javascript:void(0);">全选a>
    77. <a href="javascript:void(0);" class="del">删除a>
    78. p>
    79. <p class="fr">
    80. <span><small id="sl">0small>件商品span>
    81. <span>合计: <small id="all">¥0.00small>span>
    82. <a class="count">结算a>
    83. p>
    84. div>
    85. div>
    86. div>
    87. <div class="mask">div>
    88. <div class="tipDel">
    89. <p>确定要删除该商品吗?p>
    90. <p class="clearfix">
    91. <a class="fl cer" href="javascript:void(0);">确定a>
    92. <a class="fr cancel" href="javascript:void(0);">取消a>
    93. p>
    94. div>
    95. <#include "common/footer.html">
    96. <div class="mask">div>
    97. <div class="proDets">
    98. <img class="off" src="img/temp/off.jpg" />
    99. <div class="proCon clearfix">
    100. <div class="proImg fr">
    101. <img class="list" src="img/temp/proDet.jpg" />
    102. <div class="smallImg clearfix">
    103. <img src="img/temp/proDet01.jpg" data-src="img/temp/proDet01_big.jpg">
    104. <img src="img/temp/proDet02.jpg" data-src="img/temp/proDet02_big.jpg">
    105. <img src="img/temp/proDet03.jpg" data-src="img/temp/proDet03_big.jpg">
    106. <img src="img/temp/proDet04.jpg" data-src="img/temp/proDet04_big.jpg">
    107. div>
    108. div>
    109. <div class="fl">
    110. <div class="proIntro change">
    111. <p>颜色分类p>
    112. <div class="smallImg clearfix">
    113. <p class="fl on"><img src="img/temp/prosmall01.jpg" alt="白瓷花瓶+20支快乐花" data-src="img/temp/proBig01.jpg">p>
    114. <p class="fl"><img src="img/temp/prosmall02.jpg" alt="白瓷花瓶+20支兔尾巴草" data-src="img/temp/proBig02.jpg">p>
    115. <p class="fl"><img src="img/temp/prosmall03.jpg" alt="20支快乐花" data-src="img/temp/proBig03.jpg">p>
    116. <p class="fl"><img src="img/temp/prosmall04.jpg" alt="20支兔尾巴草" data-src="img/temp/proBig04.jpg">p>
    117. div>
    118. div>
    119. <div class="changeBtn clearfix">
    120. <a href="#2" class="fl"><p class="buy">确认p>a>
    121. <a href="#2" class="fr"><p class="cart">取消p>a>
    122. div>
    123. div>
    124. div>
    125. div>
    126. <div class="pleaseC">
    127. <p>请选择宝贝p>
    128. <img class="off" src="img/temp/off.jpg" />
    129. div>
    130. <script src="js/public.js" type="text/javascript" charset="utf-8">script>
    131. <script src="js/pro.js" type="text/javascript" charset="utf-8">script>
    132. <script src="js/cart.js" type="text/javascript" charset="utf-8">script>
    133. body>
    134. html>

    加入两件商品

     可以看见修改数量的时候小计会发生改变

     

     点击删除

     确认之后 就删除成功

     

     

  • 相关阅读:
    支付宝支付接口的调用
    服务器、云服务器、高防服务器都有什么优势呢?
    使用React 18和WebSocket构建实时通信功能
    Flink窗口理论到实践
    十、性能测试之数据库测试
    [JQ][属性]【css】
    Qt+WebAssembly学习笔记(六)win10+Qt6.4.0rc1开发环境搭建
    css3 都有哪些新属性
    【数据链路层】封装成帧和透明传输和差错控制
    如何远程控制别人电脑进行技术支持?
  • 原文地址:https://blog.csdn.net/weixin_62735525/article/details/127734472