计算总jquery

时间:2015-06-15 11:42:26

标签: jquery

我有一个问题,我可以正确地添加到总价格中考虑3种类型的商品。
每个人都有货物数量的输入。
当突变计算总价格变得不规则时。
我怎样才能纠正总价格? demo
对不起我的英语,我希望你会意识到我的意思

$('.checkbox').change(function () {
    var item = $(this).parent();
    if ( $(this).is(':checked') ) {
        addPrice(item);
    } else {
        removePrice(item);
    }
});

function addPrice(item) {
    var price = $(item).find('.price').text().replace('.', '');
    var totalPrice = $('.total-price').text().replace('.', '');
    var addToPrice = (parseFloat(totalPrice) + parseFloat(price)).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");

    $('.total-price').text(addToPrice);
}

function removePrice(item) {
    var price = $(item).find('.price').text().replace('.', '');
    var totalPrice = $('.total-price').text().replace('.', '');
    var addToPrice = (parseFloat(totalPrice) - parseFloat(price)).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");

    $('.total-price').text(addToPrice);
}

$(document).on('input', '.quniti',function(){
    var item = $(this).parent();

    var quniti = $(item).find('.col').val();
    var totalPriceOld = $('.total-price').text();

    var addPrice = (parseFloat(quniti) * parseFloat($(this).val() || 0));
    var addTotalPrice = (parseFloat(totalPriceOld) + parseFloat(addPrice));

    $(item).find('label').text(addPrice.toString().replace(/\B(?=(\d{3})+(?!\d))/g, "."));

    if ($(item).find('input[type="checkbox"]').is(':checked') ) {
        $('.total-price').text( addTotalPrice.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".") );
    }
});

2 个答案:

答案 0 :(得分:1)

试试这个结构

$('.checkbox').change(function () {
   recount();
});

function recount() {
    var sum=0;
  $('.price').each(function(){
        if ($(this).parent().find('.checkbox').is(":checked")){
    sum += parseFloat($(this).text()); 
    $('.total-price').text(sum);
        }
});
}

$(document).on('input', '.quniti',function(){
    var item = $(this).parent();

    var quniti = $(item).find('.col').val();
    var addPrice = (parseFloat(quniti) * parseFloat($(this).val() || 0));

    $(item).find('label').text(addPrice.toString().replace(/\B(?=(\d{3})+(?!\d))/g, "."));
    recount();
    });

工作示例是here

答案 1 :(得分:0)

这是我第一次来这里,所以请原谅我是否有任何错误

我认为你需要让流程更简单,这里是HTML

<div class="tovar">
    <input type="checkbox" id="span1" class="checkbox">
    <label for="span1" class="price">1.360</label>
    <input type="text" class="quniti">
</div>
<div class="tovar">
    <input type="checkbox" id="span2" class="checkbox">
    <label for="span2" class="price">1.270</label>
    <input type="text" class="quniti">
</div>
<div class="tovar">
    <input type="checkbox" id="span3" class="checkbox">
    <label for="span3" class="price">1.470</label>
    <input type="text" class="quniti">
</div>
<div class="total-price">35</div>

这是js

$('.checkbox').change(function () {
    var item = $(this).parent();
    if ( $(this).is(':checked') ) {
        addPrice(item);
    } else {
        removePrice(item);
    }
});

function addPrice(item) {
    var price = parseFloat($(item).find('.price').text());
    var quniti = parseFloat($(item).find('.quniti').val() || 0);
    var totalPrice = parseFloat($('.total-price').text());
    var newPrice = totalPrice + quniti * price;

    $('.total-price').text(newPrice);
}

function removePrice(item) {
    var price = parseFloat($(item).find('.price').text());
    var quniti = parseFloat($(item).find('.quniti').val() || 0);
    var totalPrice = parseFloat($('.total-price').text());
    var newPrice = totalPrice - quniti * price;

    $('.total-price').text(newPrice);
}

示例:http://jsfiddle.net/zk3gfb4w/12/