JS基础项目全栈(购物车)ES5

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <style type="text/css">
      * {
        margin: 0;
        padding: 0;
        text-decoration: none;
        list-style: none;
      }
      body {
        background: #ea4335;
      }
      .main {
        width: 800px;
        margin: auto;
        margin-top: 20px;
      }
      .top {
        background: #fff;
        padding: 10px;
      }
      .ipt {
        width: 230px;
        height: 32px;
        line-height: 32px;
        border: 1px solid #ccc;
      }
      .btn {
        height: 34px;
        width: 120px;
        border: none;
      }

      .cart {
        background: #fff;
        margin-top: 20px;
        padding: 10px;
      }
      .cart .tr {
        height: 35px;
      }
      .cart .tr div {
        float: left;
        line-height: 35px;
      }
      .cart .tr {
        padding: 5px 0px;
        border-bottom: 1px solid #ccc;
      }
      .cart .tr {
        clear: both;
      }
      .cart .tr div:nth-child(1) {
        width: 20%;
      }
      .cart .tr div:nth-child(2) {
        width: 20%;
      }
      .cart .tr div:nth-child(3) {
        width: 20%;
      }
      .cart .tr div:nth-child(4) {
        width: 30%;
      }
      .cart .tr div:nth-child(5) {
        width: 10%;
      }
      .cart .tr input {
        width: 50px;
      }

      .footer {
        background: #fff;
        margin-top: 20px;
        padding: 10px;
      }
      #amount {
        color: red;
      }
    </style>
  </head>
  <body>
    <div class="main">
      <div class="top">
        商品名称:<input type="text" name="" value="" id="title" class="ipt" />
         商品价格:<input type="text" name="" value="" id="price" class="ipt" />
        <input type="button" value="加入购物车" class="btn" id="addcart" />
      </div>
      <div class="cart">
        <div class="tr">
          <div><input type="checkbox" name="" value="" id="selectAll" /> 全选按钮</div>
          <div>商品名称</div>
          <div>商品价格</div>
          <div>数量</div>
          <div>操作</div>
        </div>
        <div id="goods">
          <!-- <div class="tr" id="1655771835688">
            <div><input type="checkbox" name="ckboxs" value="1655771835688" /></div>
            <div>鼠标</div>
            <div>100元</div>
            <div>
              <a href="javascript:;" name="-">-</a>
              <input type="text" value="1" readonly="" />
              <a href="javascript:;" name="+">+</a>
            </div>
            <div><a href="javascript:;" name="del">删除</a></div>
          </div> -->
        </div>
      </div>
      <div class="footer">
        总共<span id="count">0</span>件商品,
        共计 <span id="amount">0</span> 元
        <a href="javascript:;" class="r" id="delall">清空购物车</a>
      </div>
    </div>
    <!-- <script src="./购物车(es6).js"></script> -->
    <!-- <script src="./购物车(es5).js"></script> -->
    <script src="./购物车es6new.js"></script>
    <!-- <script src="./购物车es5new.js"></script> -->
  </body>
</html>




// es5 实现逻辑:针对某一个功能,具体去实现
// 自己去获取dom,自己去修改dom的内容,再去写入到dom
let title = document.getElementById("title");
let price = document.getElementById("price");
let addcart = document.getElementById("addcart");
let goods = document.getElementById("goods");
let selectAll = document.getElementById("selectAll");
let delall = document.getElementById("delall");
// 添加购物车
addcart.addEventListener("click", render);
function render() {
  //   console.log(isNaN("123"));
  let titleValue = title.value;
  let priceValue = price.value;
  if (titleValue == "" || priceValue == "") {
    return;
  } else if (isNaN(priceValue)) {
    alert("价格应该是数值");
  } else {
    let str = `
    <div class="tr" id="1655771835688">
    <div><input type="checkbox" name="ckboxs" value="1655771835688" /></div>
    <div>${titleValue}</div>
    <div>${priceValue}元</div>
    <div>
      <a href="javascript:;" name="-">-</a>
      <input type="text" value="1" readonly="" />
      <a href="javascript:;" name="+">+</a>
    </div>
    <div><a href="javascript:;" name="del">删除</a></div>
  </div>
    `;
    goods.insertAdjacentHTML("beforeend", str);
    // 清空输入框
    document.getElementById("title").value = "";
    document.getElementById("price").value = "";
    // 统计数量及价格
    countAndAmount();
  }

  //    console.log(titleValue,priceValue);
}
// 监听goods的点击事件
goods.addEventListener("click", goodsFun);
function goodsFun(e) {
  switch (e.target.name) {
    case "del":
      DelFun(e.target);
      break;
    case "+":
      addNum(e.target);
      break;
    case "-":
      reduceNum(e.target);
      break;
    case "ckboxs":
      ckboxsFun(e.target);
      break;
  }
}
// 删除的回调
function DelFun(item) {
  // confirm('你确定要删除')
  let tr = item.parentNode.parentNode;
  tr.parentNode.removeChild(tr);
  //统计数量及价格
  countAndAmount();
}
// +的回调
function addNum(item) {
  let num = item.previousElementSibling.value;
  num++;
  item.previousElementSibling.value = num;
  //统计数量及价格
  countAndAmount();
}
// -的回调
function reduceNum(item) {
  let num = item.nextElementSibling.value;
  if (num > 1) {
    num--;
  } else {
    // DelFun(item);
  }
  item.nextElementSibling.value = num;
  //统计数量及价格
  countAndAmount();
}
// 单选框的回调
function ckboxsFun() {
  selectAll.checked = true;
  let ckboxsAll = document.getElementsByName("ckboxs");
  for (let i = 0; i < ckboxsAll.length; i++) {
    let isChecked = ckboxsAll[i].checked;
    if (!isChecked) {
      selectAll.checked = false;
    }
  }
  //统计数量和价格
  countAndAmount();
}
// 全选框的回调
selectAll.addEventListener("click", selectAllFun);
function selectAllFun() {
  let ckboxsAll = document.getElementsByName("ckboxs");
  for (let i = 0; i < ckboxsAll.length; i++) {
    ckboxsAll[i].checked = selectAll.checked;
  }
  //统计数量及价格
  countAndAmount();
}
// 清空购物车
delall.addEventListener("click", delallFun);
function delallFun() {
  goods.innerHTML = "";
  selectAll.checked=false
  //统计数量及价格
  countAndAmount();
}
// 统计数量及总价的回调
function countAndAmount() {
  let countElement = document.getElementById("count");
  let amountElement = document.getElementById("amount");
  let count = 0;
  let amount = 0;
  for (let i = 0; i < goods.children.length; i++) {
    let isChecked = goods.children[i].children[0].children[0].checked;
    if (isChecked) {
      let num = +goods.children[i].children[3].children[1].value;
      let price = goods.children[i].children[2].innerHTML;
      price = parseFloat(price);
      count += num;
      amount += num * price;
    }
  }
  countElement.innerHTML = count;
  amountElement.innerHTML = amount;
}
countAndAmount();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值