Невозможно исправить функцию итогов в корзине - PullRequest
1 голос
/ 03 декабря 2011

Я новичок в написании кода и прохожу этот урок по jquery, используя пример корзины покупок: http://jumpstartlab.com/resources/jquery-jumpstart/jscart---a-jquery-shopping-cart/

У меня возникают проблемы, когда я пытаюсь подсчитать количество покупокcart.The итоги некоторые странные числа, такие как кратные количества на складе.Если у кого-то есть какие-либо идеи, чтобы помочь мне устранить мою ошибку, я буду очень признателен.Вот проблемный раздел:

var JSCart = {
  update_cart_item_count : function () {
    var items = $('#cart div.cart_item');
    var total = 0;

    items.each(function (){

        var quant = items.find('span.qty');
        var value = parseInt(quant.text());        
        total = total + value;
        $('span#cart_quantity').text(total);
        });
},

Вот и все, включая этот раздел:

$(document).ready(function (){

var inventory = $(raw_inventory); 

var prototype_item = $('#prototype_item');
prototype_item.detach();    

var prototype_cart = $('#prototype_cart');
prototype_cart.detach();  

var JSCart = {
    update_cart_item_count : function () {
        var items = $('#cart div.cart_item');
        var total = 0;

        items.each(function (){

            var quant = items.find('span.qty');
            var value = parseInt(quant.text());        
            total = total + value;
            $('span#cart_quantity').text(total);
            });
    },
    update_cart_total : function () {   
    },
    update_cart : function () {
         this.update_cart_item_count();
         this.update_cart_total();
         //alert('Updating the cart...');
         }
    };

 inventory.each(function(){
  //     alert("Inserting " + this.name);
       var item = prototype_item.clone();  
            item.find('h3').text(this.name);
            item.find('span.price').text(this.price);
            item.find('span.qty').text(this.stock);
            $('div#prototype_item').attr('id', 'product_' + this.product_id);
            $('#inventory').append(item);

       var cart_item = prototype_cart.clone();
            cart_item.find('h3').text(this.name);              
            $('div#prototype_cart').attr('id', 'product_' + this.product_id);
            $('#cart').append(cart_item);

       item.click(function () {
        //alert("Adding " + $(this).attr('id') + " to the cart." );
            var target_id = $(this).attr('id'); 
            var target = $('div#cart div#' + target_id); 

            var quantity = target.find('span.qty'); 
            var current = parseInt(quantity.text()); 
            $(quantity).text(current + 1); 
            JSCart.update_cart();
        });

  });
});

Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 03 декабря 2011

Я считаю, что ваша проблема в этой строке:

var quant = items.find('span.qty');

Поскольку вы перебираете элементы, но не предоставляете значение для каждого элемента в итерации при вызове items.find, он находит все значения qty, что означает, что вы всегда получаете текст первого, когда вы перейдите, чтобы разобрать его как целое число.

Вы, вероятно, хотите что-то вроде этого:

$('div.cart_item').each(function (i, item) {})

0 голосов
/ 04 декабря 2011

Кому-то, кто первым ответил на мой вопрос, но затем отозвал ответ, спасибо за подсказку.Это заставило меня экспериментировать, и я заставил его работать, изменив следующую строку в каждой функции:

 var quant = items.find('span.qty');

на эту:

var quant = $(this).find('span.qty');
...