При повторном вызове функции нужно убрать то, что вывелось после первого

Тема в разделе "JavaScript", создана пользователем Konpolya, 15 сен 2018.

  1. Konpolya

    Konpolya Постоялец

    Регистр.:
    23 окт 2015
    Сообщения:
    75
    Симпатии:
    9
    Здравствуйте! У меня такая проблема. Когда на сайте нажимаю на кнопку "добавить в корзину товар" выводится эта функция, которая выводит возле корзины надпись "Всего товаров 1 на сумму 1000р";
    Но, если добавить еще товар, то вывод будет выглядеть так: "Всего товаров 1 на сумму 1000рВсего товаров 2 на сумму 2000р". То есть повторяться. А мне нужно, чтобы первая надпись стиралась и оставалось только "Всего товаров 2 на сумму 2000р".

    Код:
            function addToCart(items) {
                var count = 0, price = 0;
                $.each(items, function (i,e) {
                    count = count + parseInt(e.count);
                    price = price + parseInt(e.price * e.count);
                    var html = '<tr class="cart_pr_it"><td class="cart_pr_im"><a href="/' + e.category_link + '/' + e.id + '-' + e.link_rewrite + '/" title="' + e.name + '"><img height="100" width="100" src="/imgs/' + e.image_id + '/1/"></a></td><td class="cart_pr_na"><a href="/' + e.category_link + '/' + e.id + '-' + e.link_rewrite + '/" title="' + e.name + '">' + e.name + '</a></td><td class="cart_pr_cou">&#8854;' + e.count + 'шт.&#8853;</td><td class="cart_pr_pri">' + (e.price * e.count) + 'руб.</td></tr>'
                    hint.append(html);
                });
                $('div.cart').append('<a href="/cart" title="Перейти в корзину">Всего товаров &nbsp; ' + count + ' на сумму ' + price + ' руб</a>');
            }
    
    Если обновить страницу, то будет все в порядке - "Всего товаров 2 на сумму 2000р"

    а вот код, который при нажатии на кнопку добавляет товар в корзину
    Код:
    $('div.column-add_to_cart').on('click', function () {
                var val = $(this).children('.button').attr('value');
                $.getJSON(
                    '/ajax/add/',
                    {product_id:val},
                    function (result) {
                        if (result.success == true){ addToCart(result.items)}
                    }
                );
            });
    В js совсем не понимаю, надеюсь правильно изложил)


    То есть при нажатии на кнопку, на странице появляется <a href="">Всего...</a>, если нажать еще раз, то эти строчек будет уже 2:
    <a href="">Всего...</a>
    <a href="">Всего...</a>
    И так далее, а мне нужно сделать так, что если есть несколько <a>, то нужно оставить только одну, последнюю
     
    Последнее редактирование: 16 сен 2018
  2. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    451
    Симпатии:
    1.159
    $('div.cart').append('<a href="/cart" title="

    Вместо append сделай html, так:

    $('div.cart').html('<a href="/cart" title="
     
    Konpolya нравится это.
  3. Konpolya

    Konpolya Постоялец

    Регистр.:
    23 окт 2015
    Сообщения:
    75
    Симпатии:
    9
    Спасибо, помогло, но не до конца)) сами товары наслаиваются друг на друга.
    Если в корзине уже было 3 товара и добавить четвертый, то покажет 7 товаров (с повторами)
    <tr class="cart_pr_im"></tr>
    <tr class="cart_pr_im"></tr>
    <tr class="cart_pr_im"></tr>

    А если вот здесь заменить append на html
    Код:
    var html = '<tr class="cart_pr_it"><td class="cart_pr_im">' + e.name + '</tr>'
                    hint.append(html);
    , то будет показан только последний добавленный в корзину товар.
     
  4. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    451
    Симпатии:
    1.159
    Попробуй перед
    hint.append(html);
    Поставить
    hint.empty();
     
  5. L2Banners

    L2Banners Создатель

    Регистр.:
    15 сен 2017
    Сообщения:
    48
    Симпатии:
    19
    Мне кажется было бы проще очистить товары и просто вызвать функцию, которая собирает их при загрузке страницы, но вообще такие вещи в консоле надо дебажить...