JS代码实现商品价钱总和(模拟购物车功能)

Posted 珍惜缘份

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS代码实现商品价钱总和(模拟购物车功能)相关的知识,希望对你有一定的参考价值。

题设的主体html代码如下:(以作事例)

 

<body>

<ul id="list">

  <li>樱桃<br>

    <input type="button" value="-" />

    <strong>0</strong>

    <input type="button" value="+" />

    单价:<em>12.5元</em>

    小计:<span>0元</span>

  </li>

  <li>香蕉<br>

    <input type="button" value="-" />

    <strong>0</strong>

    <input type="button" value="+" />

    单价:<em>2.5元</em>

    小计:<span>0元</span>

  </li>

  <li>火龙果<br>

    <input type="button" value="-" />

    <strong>0</strong>

    <input type="button" value="+" />

    单价:<em>8.5元</em>

    小计:<span>0元</span>

  </li>

  <li>榴莲<br>

    <input type="button" value="-" />

    <strong>0</strong>

    <input type="button" value="+" />

    单价:<em>28元</em>

    小计:<span>0元</span>

  </li>

  <li>车厘子<br>

    <input type="button" value="-" />

    <strong>0</strong>

    <input type="button" value="+" />

    单价:<em>14.5元</em>

    小计:<span>0元</span>

  </li>

  <li>菠萝<br>

    <input type="button" value="-" />

    <strong>0</strong>

    <input type="button" value="+" />

    单价:<em>7元</em>

    小计:<span>0元</span>

  </li>

</ul>

<p>

商品合计共:<em>0件</em>,共花费了:<em>0元</em><br />

其中最贵的商品单价是:<strong>0元</strong>

</p>

</body>

《原生版》javascript代码如下:

<script>

window.onload = function(){

 var oP = document.getElementsByTagName(\'p\')[0];

 var aEm = oP.getElementsByTagName(\'em\');

 var aStrong = oP.getElementsByTagName(\'strong\')[0];

 

 var oUl = document.getElementById(\'list\');

 var oLi = oUl.getElementsByTagName(\'li\');

 var oStrong = oUl.getElementsByTagName(\'strong\');

 var oSpan = oUl.getElementsByTagName(\'span\');

 var oEm = oUl.getElementsByTagName(\'em\');

 

 var sum = 0;

 var emMax = 0;

 for(var i=0;i<oEm.length;i++){

  //最大的那个单价值

       if(parseFloat(oEm[i].innerHTML)>emMax){

       emMax=parseFloat(oEm[i].innerHTML);

       }

    aStrong.innerHTML=emMax+\'元\';

 }

       //调用fn1()函数实现商品数量的选取

 for(var i=0;i<oLi.length;i++){

        fn1(oLi[i]);

 }

       //添加点击事件获取总的商品数量

        aEm[0].onclick = function(){

 for(var i=0;i<oStrong.length;i++){

  var a = Number(oStrong[i].innerHTML);

  sum+=a;

  aEm[0].innerHTML = sum+\'件\';

  }

  sum= 0;

 }

       //添加点击事件获取总的价钱

       aEm[1].onclick = function(){

 for(var i=0;i<oSpan.length;i++){

  var a = parseFloat(oSpan[i].innerHTML);

  sum+=a;

  aEm[1].innerHTML = sum+\'元\';

  }

  sum= 0;

 }

 

 

 function fn1(aLi){

  var oBtn = aLi.getElementsByTagName(\'input\');

     var oStrong = aLi.getElementsByTagName(\'strong\')[0];

  var oEm = aLi.getElementsByTagName(\'em\')[0];

  var oSpan = aLi.getElementsByTagName(\'span\')[0];

  var n1 = Number(oStrong.innerHTML);

  var n2 = parseFloat(oEm.innerHTML);

  

 

    oBtn[0].onclick = function(){

   n1--;

   if(n1<0){

      n1 = 0;

   }

   oStrong.innerHTML = n1;

   oSpan.innerHTML = n1*n2+\'元\';

   };

  oBtn[1].onclick = function(){

   n1++;

   oStrong.innerHTML = n1;

   oSpan.innerHTML = n1*n2+\'元\';

   };

 }

}

</script>

 

反思:上述代码添加点击事件获取商品的总价钱数以及总的商品数量,可能增加了用户负担。需要改进

 

《改进版》JavaScript代码如下:

window.onload = function(){

 var oP = document.getElementsByTagName(\'p\')[0];

 var aEm = oP.getElementsByTagName(\'em\');

 var aStrong = oP.getElementsByTagName(\'strong\')[0];

 var oUl = document.getElementById(\'list\');

 var oLi = oUl.getElementsByTagName(\'li\');

 var oStrong = oUl.getElementsByTagName(\'strong\');

 for(var i=0;i<oLi.length;i++){

        fn1(oLi[i]);

 }

 

 function fn1(aLi){

  var oBtn = aLi.getElementsByTagName(\'input\');

     var oStrong = aLi.getElementsByTagName(\'strong\')[0];

  var oEm = aLi.getElementsByTagName(\'em\')[0];

  var oSpan = aLi.getElementsByTagName(\'span\')[0];

  var n1 = Number(oStrong.innerHTML);

  var n2 = parseFloat(oEm.innerHTML);

  //合计总价,必然要相加所有的小计

       function fn2(){

          var sum1=0;//定义一个临时变量,用来储存所加过的件数

          var sum2=0;//定义一个临时变量,用来储存所加过的小计

          var emMax=0;//定义一个临时变量,用来比较单价的大小

          for(var i=0;i<oLi.length;i++){

      var strongs=oLi[i].getElementsByTagName("strong")[0];//获取到所有li的数量

             var spans=oLi[i].getElementsByTagName("span")[0];//获取到所有li的小计

             var em=oLi[i].getElementsByTagName("em")[0];//获取到所有li的单价

      sum1=sum1+Number(strongs.innerHTML);

             sum2=sum2+parseFloat(spans.innerHTML);//合计即所有小计相加的结果,因为有小数所以要用parseFloat

          if(parseFloat(em.innerHTML)>emMax){//最大的那个单价值

              emMax=parseFloat(em.innerHTML);

                    }

                }

  aEm[0].innerHTML=sum1+\'件\';

                aEm[1].innerHTML=sum2+\'元\';

                aStrong.innerHTML=emMax+\'元\';

            }

   fn2();

   oBtn[0].onclick = function(){

   n1--;

   if(n1<0){

      n1 = 0;

   }

   oStrong.innerHTML = n1;

   oSpan.innerHTML = n1*n2+\'元\';

   fn2();//调用合计之后的值

   };

  oBtn[1].onclick = function(){

   n1++;

   oStrong.innerHTML = n1;

   oSpan.innerHTML = n1*n2+\'元\';

   fn2();

   };

 }

}

</script>

此时总的商品件数和商品总计会随用户的商品选择进行实时改变。

以上是关于JS代码实现商品价钱总和(模拟购物车功能)的主要内容,如果未能解决你的问题,请参考以下文章

JS实现购物车

jQuery仿购物车案例

Python|模拟商品加入购物车并结算价钱问题解决方法

js实现的购物车选中商品实现计算商品总价格

vue入门------简单购物车功能实现(全选,数量加减,价格加减)

javascript详解实现购物车完整功能(附效果图,完整代码)