Quantcast
Channel: Форум программистов и сисадминов Киберфорум
Viewing all articles
Browse latest Browse all 514750

Купленный товар после перемещения (покупка по клику) в корзину, должен быть не доступен для повторного клика - JavaScript

$
0
0
Купленный товар после перемещения(покупка по клику) в корзину, должен быть не доступен для повторного клика и еще нужно создать отдельную страницу только для просмотра купленного товара.

Написала JS, что то не выводить на отдельную страницу и почему не показывает таблица.

index.html
:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Main page</title>
    <link rel="stylesheet" href="style.css">
    <script src="cookie.js" defer></script>
    <script src="script.js" defer></script>
</head>

<body>
    <div id="top-line">
      <div  id="backet-img">
          <a href="#"><img src="img/korzina.png" alt=""></a>
      </div>
      <div id="backet">
          <a href="cart.html" id="checkout" class="btn btn-info"><span>Корзина</span></a>
      </div>
    </div>

    <div id="main-block">
        <div class="block">
            <div class="block-img"></div>
            <h3 class="title">Samsung Galaxy</h3>
            <p>Price:<span class="price">20</span> tenge </p>
            <button class="add_item" data-id="1" data-title="Samsung" data-price="20">Добавить в корзину</button>
        </div>
        <div class="block">
            <div class="block-img"></div>
            <h3 class="title">LG Optimus</h3>
            <p>Price:<span class="price">100</span> tenge </p>
            <button class="add_item" data-id="2" data-title="LG Optimus" data-price="100">Добавить в корзину</button>
        </div>
    </div>
</body>
</html>

cart.html
:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div class="container">
    <div class="container-fluid col-md-12 text-center" id="cart_content"></div>
</div>

<script src="script.js"></script>
</body>
</html>

script.js
:

var cartModule = (function () {

    var cart = {
        addAllEvents : function () {
            var itemBox = document.getElementsByClassName('block');
            for(var i = 0; i < itemBox.length; i++){
                this.addEvent(itemBox[i].querySelector('.add_item'), 'click', this.addToCart);
            }
            this.addEvent(document.getElementById('backet'), 'click', this.openCart);
        },

        addEvent : function (element, type, handler) {
            if (element.addEventListener) {
                element.addEventListener(type, handler, false);
            } else if (element.attachEvent) {
                element.attachEvent('on' + type, handler)
            } else {
                element['on' + type] = handler;
            }
        },

        getCartData : function () {
            return JSON.parse(localStorage.getItem('Cart'));
        },

        setCartData : function (key) {
            localStorage.setItem('Cart', JSON.stringify(key));
        },

        addToCart : function () {
            var item = {
                id      : parseInt(this.getAttribute('data-id')),
                title    : this.getAttribute('data-title'),
                price    : parseInt(this.getAttribute('data-price')),
            };
            var count = 0;
            var data = cart.getCartData() || {};

            if(data.hasOwnProperty(item.id)){
                localStorage.setItem('Cart::count', 1 + parseInt(localStorage.getItem('Cart::count')));
                data[item.id][3]  += 1;//item.quantity + data[item.id][3]; /
                data[item.id][2]  = item.price * data[item.id][3];
            } else {
                localStorage.setItem('Cart::count', 1  + parseInt(localStorage.getItem('Cart::count')));
                item.price    = item.price *  1;
                data[item.id]  = [ item.id, item.title, item.price,  1];
            }

            cart.setCartData(data);
            cart.getContent().innerHTML  = '';
            cart.getCheckout().innerHTML = 'Товар добавлен';
            setTimeout(function(){
                cart.getCheckout().innerHTML = 'Корзина <sup>' + parseInt(localStorage.getItem('Cart::count')) + '</sup>';
            }, 1000);
        },

        openCart : function () {
            var data = cart.getCartData() || {};

            if(Object.keys(data).length !== 0){
                var count = 0;
                var price = 0;
                var item  = '';

                for(var items in data){
                    price = price + parseInt(data[items][2]);
                    count = count + parseInt(data[items][3]);

                    item += '<tr class="quantity" data-id="' + data[items][0] + '">'
                        + '<td class="id">' + data[items][0] + '</td>'
                        + '<td class="title">' + data[items][1] + '</td>'
                        + '<td class="price">' + data[items][0] + '</td>'
                        + '<td><button class="decrement btn btn-primary">-</button>
                        <button class="count btn btn-default">' + data[items][3] + '</button> ' +
                        '<button class="increment btn btn-primary">+</button></td>'+ '<td class="price">' + data[items][2] + '</td>'
                        + '<td class="delete"><button class="btn btn-warning">Удалить</button></td>'
                        + '</tr>';
                }

                cart.getContent().innerHTML = ''
                    + '<table width="100%" class="table table-bordered table-hover">'
                    + '<tr><th>id</th><th>Наименование</th><th>Цена</th><th>Кол-во</th><th>Summa</th><th></th></tr>'
                    + item
                    +'<tr><td></td><td></td><td>ИТОГО:</td><td class="all_count">' + count + '</td><td class="all_price">' + price + '</td><td>' +
                    '<button id="clear_cart" class="btn btn-default">Очистить корзину</button></td></tr>'
                    + '</table>';

                var quantity = cart.getContent().querySelectorAll('.quantity');

                for(var j = 0; j < quantity.length; j++){
                    cart.addEvent(quantity[j].querySelector('.decrement'), 'click', cart.quantity);
                    cart.addEvent(quantity[j].querySelector('.increment'), 'click', cart.quantity);
                    cart.addEvent(quantity[j].querySelector('.delete'), 'click', cart.delete);
                }

                cart.addEvent(document.getElementById('clear_cart'), 'click', cart.clearCart);

            } else {
                cart.getCheckout().innerHTML = 'В корзине пусто!';
                cart.getContent().innerHTML  = ''
            }
        },

        delete : function () {
            localStorage.setItem('Cart::count', parseInt(localStorage.getItem('Cart::count')) -this.parentNode.querySelector('.count').innerHTML);
            var data = cart.getCartData();
            delete data[this.parentNode.querySelector('.id').innerHTML];

            cart.setCartData(data);
            cart.openCart();
            cart.checkout();
        },

        clearCart : function () {
            cart.getContent().innerHTML  = '';
            cart.getCheckout().innerHTML = 'Корзина очищена.';
            localStorage.clear();
            localStorage.setItem('Cart::count', 0);
        },

        quantity : function () {
            var item = {
                id      : parseInt(this.parentNode.parentNode.querySelector('.id').innerHTML),
                title    : this.parentNode.parentNode.querySelector('.title').innerHTML,
                price    : this.parentNode.parentNode.querySelector('.price'),
                count    : this.parentNode.parentNode.querySelector('.count'),
                apiece  : cart.getCartData()[this.parentNode.parentNode.querySelector('.id').innerHTML][4],
                data    : cart.getCartData(),
            };

            if (this.innerHTML == '+') {
                item.count.innerHTML++;
                item.price.innerHTML = item.count.innerHTML * item.apiece;
                localStorage.setItem('RudraJS-Cart::count', parseInt(localStorage.getItem('Cart::count')) + 1);

            } else {
                if (item.count.innerHTML > 1) {
                    item.count.innerHTML--;
                    item.price.innerHTML = item.count.innerHTML * item.apiece;
                    localStorage.setItem('Cart::count', parseInt(localStorage.getItem('Cart::count')) - 1);
                } else {
                    localStorage.setItem('Cart::count', parseInt(localStorage.getItem('Cart::count')) - item.count.innerHTML);
                    delete item.data[item.id];
                    this.parentNode.parentNode.innerHTML = '';

                    cart.setCartData(item.data);
                    cart.openCart();
                    cart.checkout();

                    return false;
                }
            }

            item.data[item.id]  = [item.id, item.title, item.price.innerHTML, item.count.innerHTML, item.apiece];

            cart.setCartData(item.data);
            cart.openCart();
            cart.checkout();
        },

        checkout : function () {
            this.getCheckout().innerHTML = 'Корзина <sup>' + parseInt(localStorage.getItem('Cart::count')) + '</sup>';
        },

        setLocalStorage : function () {
            if (localStorage.getItem('Cart::count') === null) {
                localStorage.setItem('Cart::count', 0);
            }
        },

        getContent : function () {
            return document.getElementById('cart_content');
        },

        getCheckout : function () {
            return document.getElementById('backet');
        }

    };

    cart.setLocalStorage();
    cart.checkout();

    return {
        init : function() {
            return document.addEventListener("DOMContentLoaded", function(event) {
                cart.addAllEvents();
            });
        },
    }

})();

function dd(data) {
    console.log(data);
}

cartModule.init();


Viewing all articles
Browse latest Browse all 514750

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>