原生js实现购物车功能


Posted in Javascript onSeptember 23, 2020

本文实例为大家分享了js实现购物车功能的具体代码,供大家参考,具体内容如下

使用html配合原生js实现购物车功能

* 实现购物车商品数量的加减,注意数量最少为1,数量输入仅能为数字
* 实现购物车商品的移除
* 可以在同一页面再设计几个商品信息,每个商品有价格,图片,名称,以及添加至购物车按钮,点击按钮后添加至购物车
* 实现购物车商品的总价计算

<!doctype html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>商品</title>
 <style>
 html,body{ margin: 0;}
 .row{
 width:100%;
 height:300px;
 }
 .col{
 width:200px;
 height:216px;
 margin: 0px 1px 0px 1px; padding-top: 2px;
 border:solid black 1px;
 float:left;
 text-align:center;
 }
 .col img { width: 150px;}
 </style>
 <script src="js/jquery-3.2.1.min.js"></script>
 <script>
 function calculate() {
  var tbody = document.getElementById("tb");
  var prices = tbody.querySelectorAll("td:nth-child(4)");
  var numbers = tbody.querySelectorAll("td:nth-child(5)>input[type=number]");
  var checkboxes = tbody.querySelectorAll("th:nth-child(1)>input");
  //console.log(prices);
   //console.log(numbers);
   //console.log(checkboxes);
 var total=0;
   for(var i = 0; i < prices.length; i++) {
    console.log("价格:" +parseInt(prices[i].innerText)+" 数量:"+parseInt(numbers[i].value) + "是否勾选:" + checkboxes[i].checked);
    if(checkboxes[i].checked){
     total += parseInt(prices[i].innerText)*parseInt(numbers[i].value);
 }
   }
   console.log("总价格:" + total);
   document.getElementById("total").innerText = total;
 }
 
 // 移除商品
 function del(me) {
  var tr = me.parentNode.parentNode;
  var tbody = tr.parentNode;
  tbody.removeChild(tr);
   calculate();
 }
 // 增加商品数量
 function jia(me) {
  var td = me.parentNode;
  var inputs = td.getElementsByTagName("input"); // 找到此td下所有input标签
 // inputs[1].value = inputs[1].value - 0 + 1; // 用-0的办法转为数字
 // parseInt 将字符串转整数 parseFloat 将字符串转小数
   inputs[1].value = parseInt(inputs[1].value) + 1;
   calculate();
 }
 // 减少商品数量
 function jian(me) {
  var td = me.parentNode;
  var num = td.querySelector("input[type=number]");// 只查找有type=number属性的input标签
 var r = num.value - 1;
 if( r >= 1) { // 只有减得的结果是大于等于1的情况下才需要改变文本框的值
  num.value = r;
    calculate();
 }
 }
 // 改变复选框的选中状态
 function check(me) {
  var tbody = document.getElementById("tb");
  var inputs = tbody.querySelectorAll("th input");
  for(var i = 0; i <inputs.length; i++) {
   inputs[i].checked = me.checked; // 根据me的checked状态去修改下面的每个checked状态
 }
   calculate();
 }
 // 添加商品至购物车
 function add(me) {
  var tbody = document.getElementById("tb");
   var div = me.parentNode;
  var spans = div.getElementsByTagName("span"); // 获得商品名字和价格的span
 var name = spans[0].innerText; // 获得商品名字
 
 var col_1 = tbody.querySelectorAll("td:nth-child(2)"); // nth-child 作为第几个孩子
 var found = null; // found 变量代表购物车中找到的td
 for(var i = 0; i<col_1.length; i++) {
  if( col_1[i].innerText == name) {
   found = col_1[i];
   break;
 }
 }
 
 if(found != null) { //商品名字存在
  // 修改数量 found 是找到的td
 var tr = found.parentNode;
 var input = tr.querySelector("td:nth-child(5)>input:last-child");
 console.log(input);
 jia(input);
 } else { //商品名字不存在
  // 添加商品
    var tr = document.createElement("tr");
    var th = document.createElement("th");
 th.innerHTML = '<input type="checkbox" checked onclick="calculate()">';
 
    var td1 = document.createElement("td");
    td1.innerText = spans[0].innerText;
 
    var td2 = document.createElement("td");
    var img = document.createElement("img");
    img.src = div.getElementsByTagName("img")[0].src;
    img.width = "100";
    td2.appendChild(img);
 
    var td3 = document.createElement("td");
    td3.innerText = spans[1].innerText;
 
    var td4 = document.createElement("td");
    td4.innerHTML = '<input type="button" value="-" onclick="jian(this)"><input type="number" value="1"><input type="button" value="+" onclick="jia(this)">';
 
    var td5 = document.createElement("td");
    td5.innerHTML = '<input type="button" value="移除" onclick="del(this)">';
 
    tr.appendChild(th);
    tr.appendChild(td1);
    tr.appendChild(td2);
    tr.appendChild(td3);
    tr.appendChild(td4);
    tr.appendChild(td5);
    tbody.appendChild(tr);
    calculate();
 }
 }
 </script>
</head>
<body>
 <!--这里写购物车代码-->
 <div>
 <table border="1" width="100%">
 <thead>
 <tr>
 <th><input type="checkbox" onclick="check(this)"></th>
 <th>图片</th>
 <th>名称</th>
 <th>价格</th>
 <th>数量</th>
 <th>移除</th>
 </tr>
 </thead>
 <tbody id="tb">
 <tr>
 <th><input type="checkbox" onclick="calculate()"></th>
 <td>商品1</td>
 <td><img src="images/5a0cf6bfN92a5a597.jpg" width="100"></td>
 <td>3000.00</td>
 <td>
  <input type="button" value="-" onclick="jian(this)">
  <input type="number" value="1">
  <input type="button" value="+" onclick="jia(this)">
 </td>
 <td><input type="button" value="移除" onclick="del(this)"></td>
 </tr>
 <tr>
 <th><input type="checkbox" onclick="calculate()"></th>
 <td>商品2</td>
 <td><img src="images/5a0cf672N3c785b7a.jpg" width="100"></td>
 <td>2000.00</td>
 <td>
  <input type="button" value="-" onclick="jian(this)">
  <input type="number" value="1">
  <input type="button" value="+" onclick="jia(this)">
 </td>
 <td><input type="button" value="移除" onclick="del(this)"></td>
 </tr>
 </tbody>
 <tfoot>
 <tr>
 <td colspan="6">总价<span id="total">0</span> 元</td>
 </tr>
 </tfoot>
 </table>
 </div>
 
 <!-- 商品列表 -->
 <div class="row">
 <div class="col">
 <p><span>商品1</span>价格:<span>3000.00</span></p>
 <img src="images/5a0cf6bfN92a5a597.jpg">
 <input type="button" value="添加至购物车" onclick="add(this)">
 </div>
 <div class="col">
 <p><span>商品2</span>价格:<span>2000.00</span></p>
 <img src="images/5a0cf672N3c785b7a.jpg">
 <input type="button" value="添加至购物车" onclick="add(this)">
 </div>
 <div class="col">
 <p><span>商品3</span>价格:<span>4000.00</span></p>
 <img src="images/5a1f5ed3Nfa577958.jpg">
 <input type="button" value="添加至购物车" onclick="add(this)">
 </div>
 <div class="col">
 <p><span>商品4</span>价格:<span>3500.00</span></p>
 <img src="images/5a1f5664Nfa934fac.jpg">
 <input type="button" value="添加至购物车" onclick="add(this)">
 </div>
 </div>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS解析XML的实现代码
Nov 12 Javascript
JSON 数字排序多字段排序介绍
Sep 18 Javascript
javascript实现图片循环渐显播放的方法
Feb 24 Javascript
jQuery检测鼠标左键和右键点击的方法
Mar 17 Javascript
js由下向上不断上升冒气泡效果实例
May 07 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
Oct 27 Javascript
原生js实现jquery函数animate()动画效果的简单实例
Aug 21 Javascript
JS获取字符对应的ASCII码实例
Sep 10 Javascript
jQuery实现动态加载select下拉列表项功能示例
May 31 jQuery
JS实现的点击按钮图片上下滚动效果示例
Jan 28 Javascript
记录一次完整的react hooks实践
Mar 11 Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
Dec 09 Javascript
详解微信小程序动画Animation执行过程
Sep 23 #Javascript
原生js实现分页效果
Sep 23 #Javascript
原生js实现购物车
Sep 23 #Javascript
javascript实现简易计算器功能
Sep 23 #Javascript
javascript使用正则表达式实现注册登入校验
Sep 23 #Javascript
javascript实现点击按钮切换轮播图功能
Sep 23 #Javascript
Vue3为什么这么快
Sep 23 #Javascript
You might like
PHP MSSQL 存储过程的方法
2008/12/24 PHP
PHP 中执行排序与 MySQL 中排序
2009/04/21 PHP
PHP 函数学习简单小结
2010/07/08 PHP
PHP中date()日期函数有关参数整理
2011/07/19 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
2014/08/22 PHP
laravel5.1 ajax post 传值_token示例
2019/10/24 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
jQuery 事件队列调整方法
2009/09/18 Javascript
js Map List 遍历使用示例
2013/07/10 Javascript
ComboBox 和 DateField 在IE下消失的解决方法
2013/08/30 Javascript
详解JS面向对象编程
2016/01/24 Javascript
微信jssdk在iframe页面失效问题的解决措施
2016/03/03 Javascript
无法获取隐藏元素宽度和高度的解决方案
2017/03/07 Javascript
JS实现图片手风琴效果
2020/04/17 Javascript
javascript实现电脑和手机版样式切换
2017/11/10 Javascript
理解Koa2中的async&amp;await的用法
2018/02/05 Javascript
JS与SQL方式随机生成高强度密码示例
2018/12/29 Javascript
一篇文章弄懂javascript中的执行栈与执行上下文
2019/08/09 Javascript
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
JS实现电商商品展示放大镜特效
2020/01/07 Javascript
微信小程序中的上拉、下拉菜单功能
2020/03/13 Javascript
nuxt 实现在其它js文件中使用store的方式
2020/11/05 Javascript
JavaScript async/await原理及实例解析
2020/12/02 Javascript
[48:27]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
Python实现拼接多张图片的方法
2014/12/01 Python
Django+RestFramework API接口及接口文档并返回json数据操作
2020/07/12 Python
Html5 滚动穿透的方法
2019/05/13 HTML / CSS
高级技校毕业生自荐信
2013/11/18 职场文书
医学专业大学生求职的自我评价
2013/11/27 职场文书
考试不及格检讨书
2014/01/09 职场文书
保护环境建议书400字
2014/05/13 职场文书
授权委托书格式
2014/07/31 职场文书
购房委托书
2014/10/15 职场文书
现实表现材料范文
2014/12/23 职场文书
工作检讨书范文
2015/01/23 职场文书
拉贝日记观后感
2015/06/05 职场文书