js单页面的简单购物车(列如库存,支付等功能实现)

//先应该判断库存,再进行支付,bug心得体会

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style>
            *{
                padding: 0;
                margin: 0;
            }
          .ball{
              width: 700px;
              height: 300px;
              margin: 50px auto;
              display: flex;
            /*  background-color: aqua; */
          justify-content: space-between;
          }
          .ball div{
              width: 200px;
              height: 200px;
              background-color: aqua;
            
          }
         .main div{
             width: 600px;
             height: 50px;
              margin: 50px auto;
              margin-top: -50px;
          }
          .main div input{
              width: 50px;
          }
         .main div .sub{
             width: 30px;
         }
         .main div .add{
              width: 30px;
         }
         .del{
             width: 100px;
         }
        </style>
    </head>
    <body>
     <div class="ball"></div>
    <div class="main"></div>
    
        <script>
            var ball=document.querySelector('.ball')
            var main=document.querySelector('.main')
    var arr=[
        {
            title:'足球',
            price:200,
            id:1,
            num:9
        },
        {
            title:'篮球',
            price:230,
            id:2,
            num:8
        },
        {
            title:'羽毛球',
            price:3,
            id:3,
            num:80
        }
    ]
    //商品渲染
    arr.forEach(function(item,index){
        console.log(item)
        ball.innerHTML+=`<div class="title">
        <p class="${item.id}">${item.title}</p>
        <p>价格${item.price}</p>
            <span class="num">剩余量${item.num}</span>
        <button index="${index}">加入购物车</button>
        </div>`
    })
    var btn=document.querySelectorAll('button')
    var array=[]
    //加入数据在空数组
    for(let i=0;i<btn.length;i++){
    btn[i].οnclick=function(e){
        var target=e.target
        index=target.getAttribute('index')
        console.log(arr[index].id)
        var res=array.some(item=>{ 
         return item.id==arr[index].id 
         }
        )
    
     if(res){
        array.forEach(item=>{
            if(index-0+1==item.id&&item.sun<item.num){
                item.sun++
            }
            else if(item.sun==item.num&&index-0+1==item.id){
                alert('已增添至上限!')
            }
        }
        )
        }
        else{

            array.push(arr[index])
            array.forEach(item=>{
                console.log(index-0+1)
                if(index-0+1==item.id){
                    item.sun=1
                }
            }
            )
        }
        console.log(array)
        //购物车渲染
        var a=0
    array.forEach((item,index)=>{
        var input=document.querySelectorAll('.input')
           if(a==0){
               main.innerHTML=''
           }
            a++
        
                 main.innerHTML+=`<div class="${item.id}">
                 <input type="checkbox" class="input"/> 
                <span class="title">${item.title}</span>
                <button class="sub">-</button>
                <input type="text"  value="${item.sun}" class="input1"/>
                <button class="add">+</button>
                <span class="price1">单价${item.price}</span>
               <span class="num1">剩余量${item.num}</span>
                <span class="price2">总价${item.price*item.sun}</span>
                <button class="del">删除</button>
            </div>`
            
            if(index==array.length-1){
                main.innerHTML+=`<div class="tot"> 
                <input type="checkbox" class="lte"/>
                <span class="tit">合计价格:0</span>
                <button class="pay">支付</button>
                </div>
                `
                
            
                
            }
        
    }
        )
    }

    
        }
        
        document.οnclick=function(){
            
            var tot=0
      var inputs=document.querySelectorAll('.input')
        var tit=document.querySelector('.tit')
        inputs=[...inputs]
        console.log(inputs)
        for(let i=0;i<inputs.length;i++)    {
            //计算tit的合
            if(inputs[i].checked){
                var ID=inputs[i].parentNode.getAttribute('class')
                 console.log(ID)
                 array.forEach((item,index)=>{
                    
                    if(item.id==ID){
                        tot+=item.price*item.sun
                        // item.checked=true
                        tit.innerHTML=`合计价格:${tot}`
                        console.log(item)
                    }
                    }
                    )
                
            }
    
        }
        var inputs=document.querySelectorAll('.input')
        var inputs1=document.querySelectorAll('.input1')
        var price2=document.querySelectorAll('.price2')
        var lte=document.querySelector('.lte')
        var tit=document.querySelector('.tit')
        var sub=document.querySelectorAll('.sub')
        var add=document.querySelectorAll('.add')
        var del=document.querySelectorAll('.del')
        var tot=document.querySelector('.tot')
        var pay=document.querySelector('.pay')
        var num1=document.querySelectorAll('.num1')
        var num=document.querySelectorAll('.num')
        inputs=[...inputs]
        inputs1=[...inputs1]
        price2=[...price2]
        sub=[...sub]
        add=[...add]
        del=[...del]
        num1=[...num1]
        for(let i=0;i<inputs.length;i++){
            console.log(inputs)
            //实现上面元素全打勾时,下面才打勾
            inputs[i].οnclick=function(){
        var res=inputs.every(function(item){
            return item.checked
        })
        // console.log(123)
        lte.checked=res
            //消除上面元素全未打勾时还有合计价格的bug
        var rel=inputs.some(function(item){
            return item.checked
        })
    
        if(!rel){
            tit.innerHTML=`合计价格:0`
        }
        }
        }
        //实现下面元素打勾时,上面全打勾
        lte.οnclick=function(){
            let state = lte.checked
            inputs.forEach(function(item){
                item.checked=state
            })
            // //消除下面元素未打勾时还有合计价格的bug
            if(!state){
                tit.innerHTML=`合计价格:0`
            }
        }
        
        
        //在输入框时可改数字
       for(let i=0;i<inputs1.length;i++){
                inputs1[i].οnblur=function(){
                    var ID=inputs1[i].parentNode.getAttribute('class')
                   var one=0
                    array.forEach(function(item){
                                        
                            if(item.id==ID&&item.sun<item.num&&inputs1[i].value<item.num){
                         one=item.price*inputs1[i].value
                        item.sun=inputs1[i].value
                         price2[i].innerHTML=`总价${one}`
                         }
                        if(inputs1[i].value>item.num&&item.id==ID){
                           alert('超出库存,请重新输入!')
                           inputs1[i].value=1
                           one=item.price*inputs1[i].value
                           item.sun=inputs1[i].value
                           price2[i].innerHTML=`总价${one}`
                        }
                     }
                    )
                    }
            }
           //实现-的按钮功能
     for(let i=0;i<sub.length;i++){
         sub[i].οnclick=function(){
             var ID=sub[i].parentNode.getAttribute('class')
             var one=0
             inputs1[i].value--
             if(inputs1[i].value<=0){
                 inputs1[i].value=0
             }
             array.forEach(function(item){
                                 
                     if(item.id==ID){
                                      one=item.price*inputs1[i].value
                                     item.sun=inputs1[i].value
                                      price2[i].innerHTML=`总价${one}`
                                      }
                                  }
                                )
                                }
         }
         //实现+的按钮功能
      for(let i=0;i<add.length;i++){
               add[i].οnclick=function(){
                   var ID=add[i].parentNode.getAttribute('class')
                   var one=0
                   inputs1[i].value++
                   // if(inputs1[i].value<=0){
                      //  inputs1[i].value=0
                   // }
                   array.forEach(function(item){
                           if(inputs1[i].value>item.num&&item.id==ID){
                            console.log(item.num)
                            alert('已超出库存!')
                            inputs1[i].value=item.num
                            one=item.price*inputs1[i].value
                            item.sun=inputs1[i].value
                            price2[i].innerHTML=`总价${one}`
                        }
                                    
                           if(item.id==ID&&inputs1[i].value<=item.num){
                                            one=item.price*inputs1[i].value
                                           item.sun=inputs1[i].value
                                            price2[i].innerHTML=`总价${one}`
                                            }
                        
                                        }
                         
                                      )
                                      }
               }
              //实现删除的按钮功能
              for(let i=0;i<del.length;i++){
                       del[i].οnclick=function(){
                         if(confirm('确定删除吗?')){
                           var ID=del[i].parentNode.getAttribute('class')
                         del[i].parentNode.remove()
                           var one=0
                         array.forEach(function(item,index){
                                             
                                 if(item.id==ID){
                                              array.splice(index,1)
                                            if(array.length==0){
                                                // console.log(array.length)
                                                tot.remove()
                                            }
                                                  }
                                
                                              }
                                             )
                         }
                         }
                         }
            //实现支付的按钮功能    
    
             pay.οnclick=function(){
                 var a2=0,b=0,c=0,d=0,a1=0
                var flat=true
                 for(let i=0;i<inputs.length;i++)    {
                         var rel=inputs.some(function(item){
                             return item.checked==true
                         }) 
                    if(inputs[i].checked){
                        var ID=inputs[i].parentNode.getAttribute('class')
                    array.forEach((item,index)=>{
                                                     if(item.id==ID&&item.sun<=item.num&&flat){
                                                             
                                                             if(a2==0&&confirm('确定支付吗?')){
                                                                 alert('支付成功!')    
                                                            
                                                             }
                                                            else if(a2==0){
                                                                
                                                                alert('已取消支付!')
                                                                a2++
                                                                a1++
                                                                
                                                            }
                                                           if(a1==0){
                                                            
                                                                item.num=item.num-item.sun
                                                                 a2++
                                                                 num1[index].innerHTML=`剩余量${item.num}`
                                                                 // arr=array
                                                                 // num[index].innerHTML=`剩余量${item.num}`
                                                                 
                                                                    num[index].innerHTML=`剩余量${item.num}`
                                                                    inputs1[i].value=0
                                                               one=item.price*inputs1[i].value
                                                               item.sun=inputs1[i].value
                                                               price2[i].innerHTML=`总价${one}`
                                                                
                                                                }
                                                                
                                                     }
                                                     }
                                                     )
                                                    }
                                                     
                      if(!rel&&c==0){
                            alert('你还未选择商品!')
                            c++
                        }
                 }
             }
                 
         }
        </script>
    </body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值