購物車動態修改購買條數和總計(上一篇代碼的補充)

1.cart.js頁面 購物車頁面

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>cart</title>
        <!--引入bootstrap.css-->
        <link rel="stylesheet" type="text/css" href="../../bootstrap/css/bootstrap.css"/>
        <!--引入myscss.css-->
        <link rel="stylesheet" type="text/css" href="../../css/myscss.css" />
        <!--引入jquery.js-->
        <script type="text/javascript" src="../../bootstrap/js/jquery-3.1.1.js"></script>
        <!--bootstrap.js-->
        <script type="text/javascript" src="../../bootstrap/js/bootstrap.js"></script>
        <!--head.js-->
        <script type="text/javascript" src="../common/head.js"></script>
        <!--cart.js-->
        <script type="text/javascript" src="cart.js"></script>
    </head>
    <body>
        <!--公用頭部-->
        <div id="navhead"></div>
        <!--主體部分-->
        <div class="container">
            <div class="row">
                <div class="col-md-1"></div>
                <div class="col-md-10">
                    <!--content頭部圖片-->
                    <img src="../../img/otherimages/buy1.gif" />
                    <!--content中的table-->
                    <div class="panel panel-info margintop">
                        <div class="panel-heading text-center"><h4><strong>購物車列表</strong></h4></div>
                        <div id="cartable">
                            <!--<table class="table text-center">
                                <tr class="danger">
                                    <th class="text-center">序號</th>
                                    <th class="text-center">商品名稱</th>
                                    <th class="text-center">價格</th>
                                    <th class="text-center">購買數量</th>
                                    <th class="text-center">庫存</th>
                                    <th class="text-center">小計</th>
                                </tr>
                                <tr>
                                    <td>0</td>
                                    <td>Java模式</td>
                                    <td>21.5</td>
                                    <td><a class='glyphicon glyphicon-minus-sign' onclick='subBuyNum(this)'></a>1<a class='glyphicon glyphicon-plus-sign' onclick='addBuyNum(this)'></a></td>
                                    <td>100</td>
                                    <td>21.5</td>
                                </tr>
                                <tr>
                                    <td>1</td>
                                    <td>JavaScript</td>
                                    <td>18.5</td>
                                    <td>1</td>
                                    <td>100</td>
                                    <td>18.5</td>
                                </tr>
                            </table>-->
                        </div>
                        <div class="panel-footer clearfix"><span class="pull-right">總計</span></div>
                    </div>
                </div>
                <div class="col-md-1"></div>
            </div>
        </div>
    </body>
</html>

2.cart.js代碼 實現動態修改購買條數和總計

//購物車動態添加購物車信息
$(function(){
    //1.從localStorage獲取購物信息
    var books = localStorage.getItem("carts");
    var bookArr = JSON.parse(books);//將獲取到的字符串存放進數組中
    //2.聲明一個html用來拼接頁面
    var html = "";
    html += "<table id='cart' class='table text-center'>";
    html +=     "<tr class='danger'>";
    html +=         "<th class='text-center'>序號</th>";
    html +=         "<th class='text-center'>商品名稱</th>";
    html +=         "<th class='text-center'>價格</th>";
    html +=         "<th class='text-center'>購買數量</th>";
    html +=         "<th class='text-center'>庫存</th>";
    html +=         "<th class='text-center'>小計</th>";
    html +=     "</tr>";
    //3.遍歷數組
    for(var i = 0;i < bookArr.length;i++){
        //獲取一本書
        var abook = bookArr[i];
        //將書本的信息填到表格中
        html +=     "<tr>";
        html +=         "<td>"+i+"</td>";
        html +=         "<td>"+abook.name+"</td>";
        html +=         "<td>"+abook.price+"</td>";
        html +=         "<td><a class='glyphicon glyphicon-minus-sign' onclick='subBuyNum(this)'></a>"+abook.buynum+"<a class='glyphicon glyphicon-plus-sign' onclick='addBuyNum(this)'></a></td>";
        html +=         "<td>"+abook.num+"</td>";
        html +=         "<td>"+abook.price*abook.buynum+"</td>";
        html +=     "</tr>";
    }
    html += "</table>";
    $("#cartable").html(html);
});
//點擊減號按鈕
function subBuyNum(caller){
    calFunction(caller,"sub");
}
//點擊加號按鈕
function addBuyNum(caller){
    calFunction(caller,"add");
}
//優化代碼
function calFunction(caller,tag){
    //得到當前調用者的父節點
    var $parent = $(caller).parent();
    //找到父節點的文本信息
    var buyNum = parseInt($parent.text());
    //判斷當前是+還是-
    if(tag == "sub"){
        //減號
        if(buyNum>=2){
            buyNum--;
        }
    }
    //加號
    else{
        buyNum++;
    }
    //4.拼接html信息,把html放到parent中
    var html = "";
    html += "<a class='glyphicon glyphicon-minus-sign' onclick='subBuyNum(this)'></a>"+buyNum+"<a class='glyphicon glyphicon-plus-sign' onclick='addBuyNum(this)'></a>";
    $parent.html(html);

    //5.找到價格元素的信息
    var $price = $parent.prev();
    var price = parseFloat($price.text());

    //6.修改小計元素的信息
    var $lastB = $parent.next().next();
    $lastB.text(price*buyNum);

    //7.修改總計元素的信息
    calTotal();

    //8.修改本地購物車的數量
    //8.1找到序號數列
    var $first = $parent.parent().children(":first-child");
    var n = parseInt($first.text());
    modiyBuyNum(n,buyNum);
}

//計算當前購物車的總價格
function calTotal(){
    var $totalPrice = $("#totalprice"); 
    //找到table裏面的tbody,其實table的所有正文信息都放在tbody裏面
    var $table = $("#cart").children();
    var $children = $table.children(":not(:first)");
    var $rowprices = $children.children(":last-child");
    var totalp = 0;
    $rowprices.each(function(){
        var p = parseFloat($(this).text());
        totalp += p;
    })
    $totalPrice.text("總計:"+totalp);
}

//頁面一載入就計算總計購物車的總價信息
$(function(){
    calTotal();
})


//修改本地購物車的數量
function modiyBuyNum(idx,buynum){
    //1.獲取本地購車的數據(字符串)
    var books = localStorage.getItem("carts");
    //2.把字符串轉換爲數組對象
    var bookArr = JSON.parse(books);
    //3.從數組中獲取指定idx的數據
    var abook = bookArr[idx];
    //4.修改這條數據
    abook.buynum = buynum;
    //5.重新保存購物車
    var booksStr = JSON.stringify(bookArr);
    localStorage.setItem("carts",booksStr);
}

3.效果圖片
效果圖片

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章