基础购物车(Javascript)

2024-06-18 18:44
文章标签 java 基础 script 购物车

本文主要是介绍基础购物车(Javascript),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用Javascript写一个基础购物车,其中包含商品数量加加减减,下面的总价和总数量跟着商品数量变动,还可以自己添加需要的商品。

基础购物车的结构样式如下:

  HTML代码:

<body><table border="1px" cellpadding="20px" style="border-collapse: collapse;"><thead><tr><th>商品名称</th><th>商品价格</th><th>商品数量</th><th>商品操作</th></tr></thead><tbody id="goods"><tr><td>风扇</td><td>24.8¥</td><td><button>-</button> 0 <button>+</button></td><td><button>修改</button> <button>删除</button></td></tr></tbody><footer id="total"><tr><td>总价</td><td id="gross"></td><td>总数量</td><td id="qty"></td></tr></footer></table><button class="addition">添加</button><br /><!-- 点击添加显示 --><div class="inp" style="display: none;"><input class="des" type="text" placeholder="请输入商品名称" /><input class="cost" type="number" placeholder="请输入商品价格" /><input class="mag" type="number" placeholder="请输入商品数量" /><br /><button class="append">添加</button><button class="cancel">取消</button></div><!-- 点击修改显示 --><div class="amend" style="display: none;"><input class="dess" type="text" placeholder="请输入商品名称" /><input class="costs" type="number" placeholder="请输入商品价格" /><input class="mags" type="number" placeholder="请输入商品数量" /><br /><button onclick="appends()">确定</button><button onclick="cancels()">取消</button></div><script src="js/basics.js"></script></body>

 css代码:

<style>tr,td {text-align: center;}</style>

js代码:

// let声明一个变量 为data
let data;
// 声明一个最大的id
let maxid;
// 声明一个变量 为内容下标的id
let a;
// 创建 XMLHttpRequest 对象
let xhr = new XMLHttpRequest();
// 使用 open 方法指定要请求的地址、类型和方式
xhr.open('get', 'js/basics.json', true);
// 发送数据
xhr.send();
// 绑定 onreadystatechange 事件,判断 readyState 和 status 的状态
xhr.onreadystatechange = function() {// 第一个判断到哪一步,交互流程,有 5 个阶段 从0开始 4表示交互流程完毕 200是状态请求成功if (xhr.readyState == 4 && xhr.status == 200) {let text = xhr.responseText;console.log(text);// 将JSON中的数据转化为对象 接收服务器数据 一般为字符串data = JSON.parse(text);console.log(data);// 调用函数basic(data);// for循环遍历数组for (let i = 0; i < data.length; i++) {// 判断 当最大的id大于商品最大的id时 最大的id=商品的idif (maxid > data[i].id) {maxid = data[i].id}}}
};
// 封装函数
function basic(d) {let str = '';// let 声明一个变量 total为总价 总价从零开始let total = 0;// let 声明一个变量 amount为总数量 总数量从零开始let amount = 0;// let声明变量为gross 通过id名在文档中找到grosslet gross = document.getElementById('gross');// let声明变量为qty 通过id名在文档中找到qtylet qty = document.getElementById('qty');for (let i = 0; i < data.length; i++) {// +=是先算在等于// 总价等于元素的数量*所对应的价格相加total += data[i].num * data[i].price;// 总数量等于所有数据的数量 并转为整数amount += parseInt(data[i].num);// str拼接str += `<tr><td>${data[i].name}</td><td>${data[i].price}</td><td><button onclick="minus(${i})">-</button> ${data[i].num} <button onclick="add(${i})">+</button></td><td><button onclick="alter(${i})">修改</button> <button onclick="del(${i})">删除</button></td></tr>`;}// 元素.innerHTML=内容 改变总价的内容 gross.innerHTML = total;// 元素.innerHTML=内容 改变总数量的内容qty.innerHTML = amount;// 渲染数据document.getElementById('goods').innerHTML = str;
};// 数量按钮减1
// 减号事件绑定点击事件 传参
function minus(i) {// 当商品数量大于0时if (data[i].num > 0) {// 商品数量减一data[i].num--;} else {// 否则弹窗提示不能为空alert("商品数量不能为负")};// 调用函数basic(data);
};// 数量加1
function add(i) {data[i].num++;// 调用函数basic(data);
};// 商品删除
// 点击删除按钮 传参 
function del(i) {data.splice(i, 1)// 调用函数basic(data);
};// 获取添加按钮
let addition = document.getElementsByClassName('addition')[0];
console.log('addition');
// 获取下面的输入框
let inp = document.getElementsByClassName('inp')[0];
console.log('inp');
// 给添加按钮绑定点击事件
addition.onclick = function() {// 当点击添加按钮时,下面的输入框出现inp.style = "display:block"
};// 点击取消按钮输入框隐藏
// 获取取消按钮
let cancel = document.getElementsByClassName('cancel')[0];
console.log('cancel');
// 给取消按钮绑定点击事件
cancel.onclick = function() {// 点击取消按钮 下面的三个输入框隐藏并清空inp.style = "display:none";des.value = null;cost.value = null;mag.value = null;
};// 添加事件
// 获取向上添加的添加按钮
let append = document.getElementsByClassName('append')[0];
console.log('append');
// 获取三个输入框
let des = document.getElementsByClassName('des')[0];
console.log('des');
let cost = document.getElementsByClassName('cost')[0];
console.log('cost');
let mag = document.getElementsByClassName('mag')[0];
console.log('mag');
// 给添加绑定点击事件
append.onclick = function() {console.log(data);// 判断内容都不为空且价格大于零 数量大于等于零 并且数量为整数if (des.value != '' && cost.value != '' && mag.value != '' && cost.value > 0 && mag.value >= 0 && mag.value %1 === 0) {// 通过数组尾部添加添加新的内容data.push({"id": ++maxid,"name": des.value,"price": parseFloat(cost.value),"num": parseInt(mag.value)})// 添加上以后下面的输入框隐藏并清空inp.style = "display:none";des.value = '';cost.value = '';mag.value = '';console.log(data);basic(data);} else {alert("信息填写完整")};
};// 修改事件
// 获取修改隐藏的输入框
// 给修改按钮添加点击事件
let amend = document.getElementsByClassName('amend')[0];
// 获取三个输入框
let dess = document.getElementsByClassName('dess')[0];
console.log('dess');
let costs = document.getElementsByClassName('costs')[0];
console.log('costs');
let mags = document.getElementsByClassName('mags')[0];
console.log('mags');
// 给添加绑定点击事件 点击添加出现编辑弹窗
function alter(index) {console.log(index);amend.style.display = "block";// 数据回显dess.value = data[index].name;costs.value = data[index].price;mags.value = data[index].num;// a等于数据下标的ida = data[index].id;
};
// 编辑添加
// 点击下面输入框里的添加 
function appends() {// 判断三个输入框任意一个为空或价格小于0或数量小于0时 提示信息有误if (dess.value == '' || costs.value == '' || mags.value == '' || costs.value < 0 || mags.value < 0) {alert("信息有误");// 否则for循环遍历数组} else {for (let i = 0; i < data.length; i++) {// if判断用户输入的id等于内容的id时 内容修改if (data[i].id == a) {data[i].name = dess.value;data[i].price = costs.value;data[i].num = mags.value;// 修改完成 输入框隐藏 调用渲染函数alert("确认修改");amend.style.display = "none";basic(data);return;}}// 否则提示没有找到相应的数据 输入框隐藏amend.style.display = 'none';};
};
// 编辑取消
function cancels() {// 点击取消,编辑的输入框隐藏,数据重新渲染amend.style = "display:none";basic(data);
};

json假数据:

[{"id":1,"name":"风扇","price":"24.8","num":0},{"id":2,"name":"南街村拌面","price":"5","num":0},{"id":3,"name":"甜美风小裙子","price":"99.8","num":0},{"id":4,"name":"空调","price":"1688","num":0},{"id":5,"name":"维达纸巾","price":"2.5","num":0},{"id":6,"name":"衬衣","price":"50","num":0
}]

这篇关于基础购物车(Javascript)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1072807

相关文章

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有