js实现购物车

###

嘎嘎原生,看就完了

###

#

#

html部分

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><link rel="stylesheet" href="css.css" /><title>Document</title></head><body><div class="common"><a href="javascript:;" onclick="show()">添加信息</a><input type="text" value="" id="search" /><input type="submit" value="搜索" onclick="search()" /><div class="header"><div class="row01"><!--传this关键字,代表input标签对象--><input type="checkbox" class="chkall" onclick="checkall(this)" />全选</div><div class="row02">商品标题</div><div class="row03">数量</div>.<div class="row04">单价(元)</div><div class="row05">总价(元)</div><div class="row06">操作</div></div><div class="goods"></div><div class="header"><div class="row01" onclick="delall(this)">删除全部</div><div class="row02"></div><div class="row03"></div><div class="row04">总共<b>2</b>件商品</div><div class="row05">总价<span>1999.9</span>元</div><div class="row06"></div></div></div><div class="info"><a href="javascript:;" onclick="hide()">X</a><ul><li><label for="">商品标题</label><input type="text" id="title" value="" placeholder="请输入商品标题" /></li><li><label for="">商品数量</label><input type="text" id="num" value="" placeholder="请输入商品数量" /></li><li><label for="">商品单价</label><input type="text" id="price" value="" placeholder="请输入商品单价" /></li><li><label for="">&nbsp;</label><input type="submit" onclick="add()" value="提交" /></li></ul></div><script src="js1.js"></script></body>
</html>

###

css部分

* {margin: 0;padding: 0;
}
body {/* position: relative; */height: 800px;
}
.common {width: 1200px;margin: 0 auto;
}
.header {background: #e3e3e3;height: 60px;line-height: 60px;
}
.row01,
.row02,
.row03,
.row04,
.row05,
.row06 {display: inline-block;width: 10%;text-align: center;
}
.row02 {width: 30%;
}
.row03 {width: 19%;
}
.good {height: 60px;line-height: 60px;
}
.row03 a,
.row03 input {display: inline-block;width: 30px;height: 30px;border: 1px solid #e3e3e3;text-decoration: none;line-height: 30px;text-align: center;vertical-align: middle;
}
.info {position: absolute;left: 0;right: 0;top: 0;bottom: 0;margin: auto;height: 400px;width: 400px;background-color: #e3e3e3;display: none;
}
.info ul {list-style: none;
}
.info ul li {height: 50px;line-height: 50px;padding: 0 20px;
}
.info ul li input {height: 40px;line-height: 40px;width: 220px;margin-top: 20px;
}
.info a {display: inline-block;float: right;text-align: center;border: 1px solid white;width: 30px;height: 30px;
}

###

js部分

let good =JSON.parse(localStorage.getItem("good")) ||[/* {title:'小米手机',num:1,price:1999.9,totalprice:1999.0,ischecked:''},{title:'红米手机',num:1,price:1999.9,totalprice:1999.0,ischecked:''},{title:'苹果手机',num:1,price:1999.9,totalprice:1999.0,ischecked:''} */];function $(selector) {return document.querySelector(selector);
}function createhtml(good) {let html = "";good.forEach(function (item, index) {html += `<div class="good"><div class="row01"><input type="checkbox" class="chk" ${item.ischecked} onclick="chk(${index})"></div><div class="row02">${item.title}</div><div class="row03"><a href="javascript:;" onclick="inc(${index})">+</a><input type="text" value="${item.num}"><a href="javascript:;" onclick="dec(${index})">-</a></div><div class="row04">${item.price}</div><div class="row05">${item.totalprice}</div><div class="row06"><a href="javascript:;" onclick="del(${index})">删除</a></div></div>`;});total();$(".goods").innerHTML = html;
}
createhtml(good);function add() {var title = document.querySelector("#title").value;var num = parseInt(document.querySelector("#num").value);var price = parseInt(document.querySelector("#price").value);if (title == "" || num == "" || price == "") {return false;}var obj = {title: title,num: num,price: parseFloat(price),totalprice: parseInt(num) * parseInt(price),idchecked: "",};good.push(obj);hide();localStorage.setItem("good", JSON.stringify(good));createhtml(good);
}function show() {document.querySelector(".info").style.display = "block";
}
function hide() {document.querySelector(".info").style.display = "none";
}function del(index) {good.splice(index, 1);createhtml(good);localStorage.setItem("good", JSON.stringify(good));
}function delall() {for (var i = good.length - 1; i >= 0; i--) {if (good[i].ischecked) {good.splice(i, 1);}}localStorage.setItem("good", JSON.stringify(good));createhtml(good);
}function inc(index) {good[index].num++;good[index].totalprice = (good[index].num * good[index].price).toFixed(2);createhtml(good);
}
function dec(index) {if (good[index].num <= 1) {return false;}good[index].num--;good[index].totalprice = (good[index].num * good[index].price).toFixed(2);createhtml(good);
}function checkall(obj) {good.forEach(function (item) {item.ischecked = obj.checked ? "checked" : "";});createhtml(good);
}function chk(index) {good[index].ischecked = good[index].ischecked ? "" : "checked";var istrue = good.every(function (item) {return item.ischecked != "";});$(".chkall").checked = istrue;createhtml(good);
}function search() {var keyword = document.querySelector("#search").value;var arr = [];if (keyword) {arr = good.filter(function (item) {return item.title.indexOf(keyword) != -1;});} else {arr = good;}createhtml(arr);
}function total() {var totalnum = 0,totalprice = 0;good.forEach(function (item) {if (item.ischecked) {totalnum += item.num;totalprice += parseFloat(item.totalprice);}});$(".row04 b").innerHTML = totalnum;$(".row05 span").innerHTML = totalprice.toFixed(2);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/634089.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【笔记】语言实例比较 2. 两数之和 C++ Rust Java Python

语言实例比较 2. 两数之和 C Rust Java Python 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除…

【LeetCode算法题】各类排序算法的Python实现

系列文章目录 【LeetCode算法题】各类基础排序算法的Python实现 文章目录 系列文章目录【LeetCode算法题】各类基础排序算法的Python实现 1. 直接插入排序2. 折半插入排序3. 选择排序4. 冒泡排序5. 归并排序算法6.快速排序7. 堆排序总结 对于直接插入排序、折半插入排序、选择…

C++ 对一个结构体的集合进行排序,需要的代码

C 对一个结构体的集合进行排序&#xff0c;需要的代码 /* 4 50 10 60 20 100 30 120 16 45 */ #define _CRT_SECURE_NO_WARNINGS#include <iostream> #include<vector> #include <algorithm> // 需要包含 sort() 函数所在的头文件 struct P {int w;//重量int…

docker报错 missing signature key 无法拉去镜像,yum install docker-ce没有可用软件包 解决办法

错误场景描述 今天项目需要用到minio&#xff0c;我打算在虚拟机中使用docker装一个&#xff0c;可是发现当我docker pull minio/minio的时候&#xff0c;报错了missing signature key 这个报错提示的让人很蒙&#xff0c;翻译过来的意思是 “缺少签名密钥” &#xff1f;&am…

鸿蒙开发语言ArkTS--Ability中的生命周期

鸿蒙开发语言ArkTS–Ability中的生命周期 在ArkTS语言中&#xff0c;这是一个在ArkTS中定义Ability生命周期的示例。 Ability的生命周期&#xff1a; onCreate(want, launchParam)&#xff1a;在UI创建后执行的函数。在这个阶段&#xff0c;您可以执行初始化操作&#xff0c;…

7.C++ this指针

每一个非静态成员函数只会诞生一份函数实例&#xff0c;也就是说多个同类型的对象会共用一块代码。 那么这一块代码是如何区分那个对象调用自己的呢&#xff1f;C通过提供特殊的对象指针&#xff0c;this指针&#xff0c;解决上述问题。 this指针指向被调用的成员函数所属的对象…

用 Python 制作可视化 GUI 界面,一键实现自动分类管理文件!

经常杂乱无章的文件夹会让我们找不到所想要的文件&#xff0c;因此小编特意制作了一个可视化GUI界面&#xff0c;通过输入路径一键点击实现文件分门别类的归档。 不同的文件后缀归类为不同的类别 我们先罗列一下大致有几类文件&#xff0c;根据文件的后缀来设定&#xff0c;大…

GaussDB与openGauss有什么相同和不同?

众所周知&#xff0c;GaussDB是华为自主创新研发的分布式关系型数据库&#xff0c;为企业提供功能全面、稳定可靠、扩展性强、性能优越的企业级数据库服务&#xff0c;openGauss是开源数据库&#xff0c;两者之间又是什么样的关系&#xff0c;有什么相同和不同&#xff0c;让我…

如何使用Portainer部署web站点并实现无公网ip远程访问

文章目录 前言1. 安装Portainer1.1 访问Portainer Web界面 2. 使用Portainer创建Nginx容器3. 将Web静态站点实现公网访问4. 配置Web站点公网访问地址4.1公网访问Web站点 5. 固定Web静态站点公网地址6. 固定公网地址访问Web静态站点 前言 Portainer是一个开源的Docker轻量级可视…

kafka消费者

Kafka消费者从属于消费者组&#xff0c;一个组里的消费者订阅的是同一个topic&#xff0c;每个消费者接收topic一部分分区的消息可以为每一个需要获取一个或多个topic全部消息的应用程序创建一个消费者组&#xff0c;每个消费者可以消费若干个分区&#xff0c;往阻力添加消费者…

k8s的PV,PVC自动创建

此部署使用传统的pv&#xff0c;pvc方式做持久化数据存储&#xff0c;而是使用storageclass调用provisioner&#xff0c;自动给pod创建的pvc分配pv并绑定&#xff0c;从而达到持久化存储的效果。可根据自己需求创建相关的pv&#xff0c;pvc。 安装NFS服务 NFS Server IP&…

【spark】SparkSQL

目录 SparkSQL01.快速入门什么是SparkSQL为什么学习SparkSQLSparkSQL的特点SparkSQL发展历史-前身Shark框架SparkSQL发展历史 02.SparkSQL概述SparkSQL和Hive的异同SparkSQL的数据抽象DataFrame概述SparkSession对象 03.DataFrame入门和操作DataFrame的组成DataFrame的代码构建…

NativePHP:开发跨平台原生应用的强大工具

NativePHP 是一种创新性的技术&#xff0c;可以帮助开发者使用 PHP 语言构建原生应用程序。本文将介绍 NativePHP 的概念和优势&#xff0c;探讨其在跨平台应用开发中的应用&#xff0c;并提供一些使用 NativePHP 开发原生应用的最佳实践。 什么是 NativePHP&#xff1f; Nati…

SpringBoot 实现 PDF 添加水印有哪些方案

SpringBoot 实现 PDF 添加水印有哪些方案 方式一&#xff1a;使用 Apache PDFBox 库方式二&#xff1a;使用 iText 库方式三&#xff1a;用 Ghostscript 命令行方式四&#xff1a;Free Spire.PDF for Java方式五&#xff1a;Aspose.PDF for Java 简介 PDF&#xff08;Portable …

小程序显示兼容处理,home键处理

定义&#xff1a; env(safe-area-inset-bottom)和env(safe-area-inset-top)是CSS中的变量&#xff0c;用于获取设备底部和顶部安全区域的大小 示例&#xff1a; padding-bottom: calc(env(safe-area-inset-bottom) 12px); /* 兼容iOS> 11.2 */安全间距类型&#xff1a; …

【消息队列】RocketMQ 并发消费和顺序消费

在 RocketMQ 中&#xff0c;消息的消费模式包括并发消费和顺序消费&#xff0c;它们分别适用于不同的业务场景。下面是对这两种消费模式的介绍&#xff1a; 1. 并发消费&#xff1a; 特点&#xff1a; 并发消费是指多个消费者实例同时处理消息&#xff0c;每个实例独立地处理一…

js实现iframe内容加载失败自动重新加载功能

最近一个项目上的程序经常出现掉线的情况&#xff0c;经排查是该单位的网络不稳定&#xff0c;存在网络丢包现象。导致有时候程序运行加载页面失败&#xff0c;开机自启动应用时出现请求失败的概率非常大&#xff0c;为了解决这个问题我在网上东找西找也没有找到有效的解决办法…

【现代控制系统】最小实现与互质分式

最小实现和互质分式 2023年12月12日 文章目录 最小实现和互质分式1. 实现问题2. SISO严格正则系统的实现2.1 能控标准1型实现2.2 能观标准2型实现2.3 能观标准1型实现2.4 能控标准2型实现2.5 最小实现2.6 完全表征 3. 计算互质分式3.1 使用西尔韦斯特结式 4. SISO基于Markov参…

丰果管道——2024中国家装管道十大品牌

丰果管道——2024中国家装管道十大品牌 丰果&#xff08;中国&#xff09;有限公司 丰果管道品牌创立于1999年&#xff0c;是国内最早从事PPR家装管道生产的品牌之一&#xff0c;在业内有着良好的口碑和市场美誉度&#xff0c;在全国的头部装企更是有相当高的市场占有率。2023年…

猫咪发腮长肉吃什么?5款适合猫咪发腮长肉的猫罐头推荐

随着冬季的来临&#xff0c;北方的小猫咪们因为有暖气&#xff0c;日子还算好过。然而南方的猫咪们只能依靠自己的抵抗力来度过这个寒冷的季节。为了确保这些怕冷的小家伙能温暖地度过冬天&#xff0c;铲屎官们是不是该考虑为它们囤积一些肉肉呢&#xff1f; 有些猫咪&#xf…