Удаление элементов только из корзины покупок на основе JQuery

0

Я пытаюсь создать корзину покупок JQuery только для упражнений и обучения. Но у меня проблема с кодированием опции удаления элементов из корзины покупок. Вот код:

<script src="assets/jquery-2.1.0.js" type="text/javascript"></script>
<script type="text/javascript">
    var sum=0;
    var num=1;
    $(function() {          
        //Assign the producets a price date
        $( "#Product1" ).data( "price", 400 );
        $( "#Product2" ).data( "price", 500 );
        $( "#Product3" ).data( "price", 600 );

        //Adding the requested producted to the shopping cart
        $(".buy").on("click",function(evt) {
            var id=$(this).attr("id");
            $("#shopping_cart_items").append($(this).attr( "id" ) + " " +  "price: ");
            $("#shopping_cart_items").append($(this).data( "price" ) + "$" + "<img src='assets/x.png' width='10px' height='10px' class='cancel' id="
            +id + " + data-num= "+ num++ + " + >" + "<br>");

            //summing up the overall price
            sum=sum+$(this).data( "price" );
            $("#sum").text(sum+ "$");

            //Delete product from the shopping cart
            $(".cancel").on("click",function(evt) {
                //?
            }); 
        });
    });

</script>
<style>
#product img{
    width:300px;
    height:200px;   
}
#product{
    float: left;
    padding:5px;    
}
</style>
<h2>My shop</h2>

<div id="product"><img src="assets/Product1.jpg" /><br /><input type="button" value="Buy" class="buy" id="Product1" />&nbsp;price:400$</div>
<div id="product"><img src="assets/Product2.jpg" /><br /><input type="button" value="Buy" class="buy" id="Product2"/>&nbsp;price:500$</div>
<div id="product"><img src="assets/Product3.jpg" /><br /><input type="button" value="Buy" class="buy" id="Product3" />&nbsp;price:600$</div><br />
<div id="shopping_cart" align="center">
<h1>Shopping cart</h1>
<hr />
    <div id="shopping_cart_items">
    </div>
 <hr />
 Sum:<div id="sum">0$</div>
</div>

Я дал каждому продукту уникальный номер, чтобы удалить его из корзины покупок, и я знаю, что мне, вероятно, потребуется использовать .remove(), но я много раз пробовал по-разному и не мог понять это правильно.

  • 3
    Так как вы просто добавляете текст в div, будет очень трудно выполнить это без изменения существующего кода. Просто оберните каждый «продукт» в контейнер Div, затем, чтобы удалить продукт, удалите контейнер Div.
  • 0
    Кроме того, исправьте ваш HTML, идентификаторы должны быть уникальными.
Показать ещё 2 комментария
Теги:

2 ответа

0
Лучший ответ

попробуйте следующее: http://jsfiddle.net/tonicboy/68yyr/

var sum = 0;
var num = 1;
//Assign the producets a price date
$("#Product1").data("price", 400);
$("#Product2").data("price", 500);
$("#Product3").data("price", 600);

//Adding the requested producted to the shopping cart
$(".buy").on("click", function (evt) {
    var id = $(this).attr("id"),
        item = $('<div class="cart-item"></div>');
    item.append($(this).attr("id") + " " + "price: ");
    item.append($(this).data("price") + "$" + "<img src='assets/x.png' width='10px' height='10px' class='cancel' id=" + id + " + data-num= " + num++ + " data-price='" + $(this).data("price") + "' >" + "<br>");

    item.appendTo($("#shopping_cart_items"));

    //summing up the overall price
    sum = sum + $(this).data("price");
    $("#sum").text(sum + "$");
});

//Delete product from the shopping cart
$("#shopping_cart").on("click", ".cancel", function (evt) {
    var $this = $(evt.currentTarget),
        cartItem = $this.parent(),
        newPrice = parseInt($this.data('price'));

    cartItem.remove();
    sum = sum - newPrice;
    $("#sum").text(sum + "$");
});

Объяснение изменений:

  1. Прежде всего, я не уверен, почему у вас есть переменные sum и num вне закрытия jQuery. Это делает их глобальными переменными, когда им это не нужно, что является плохой практикой.
  2. Обработчик событий ".cancel" был вложен в обработчик ".buy". Он должен быть на одном уровне.
  3. Вам нужно обернуть каждую корзину в элемент, который облегчит выбор позже.
  4. Обработчик ".cancel" должен быть понятным. Он просто удаляет элемент и обновляет его.
  • 0
    Спасибо большое за помощь!
0

Вы должны обернуть продукт корзины в элемент, чтобы впоследствии его удалить. Кроме того, у вас есть код удаления не в том месте, где он должен находиться за пределами функции покупки click >

Смотрите мою демонстрацию: http://jsfiddle.net/GBF7m/

var sum = 0;
var num = 1;
$(function () {
    //Assign the producets a price date
    $("#Product1").data("price", 400);
    $("#Product2").data("price", 500);
    $("#Product3").data("price", 600);

    //Adding the requested producted to the shopping cart
    $(".buy").on("click", function (evt) {
        var id = $(this).attr("id");
        $("<span/>", {
            html: $(this).attr("id") + " " + "price: " + $(this).data("price") + "$" + "<img src='http://placehold.it/20x20' width='20px' height='20px' class='cancel' id=" + id + " + data-num= " + num+++" + ><br />",
                "data-price": $(this).data("price")
        }).appendTo("#shopping_cart_items");


        //summing up the overall price
        sum = sum + $(this).data("price");
        $("#sum").text(sum + "$");
    });

    //Delete product from the shopping cart
    $("#shopping_cart_items").on("click", ".cancel", function (evt) {
        $(this).parent("span").remove();
        sum = sum - $(this).parent("span").data("price");
        $("#sum").text(sum + "$");
    });
});
  • 0
    Спасибо большое за помощь!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню