0

我有一些输入字段

<input type="text" name="quantity[]" class="est_quantity" placeholder="quantity"/>
<input type="text" name="quantity[]" class="est_quantity" placeholder="quantity"/>
<input type="text" name="quantity[]" class="est_quantity" placeholder="quantity"/>

<input type="text" name="cost[]" class="est_cost" placeholder="cost"/>
<input type="text" name="cost[]" class="est_cost" placeholder="cost"/>
<input type="text" name="cost[]" class="est_cost" placeholder="cost"/>

我需要进行一些计算。

//Calculate total Quantity, this is how i do it.
$('.est_quantity').live('keyup', function(){
    var val = 0;
    $('.est_quantity').each(function() {
        if($(this).val().length && $(this).val() != '') {
            val += Number($(this).val());
            $('.est_total_quantity').html(val);
        }
    });
});

上面的代码工作正常,因为总数量是所有的总和,quantity[]但计算总成本几乎没有什么不同。因为计算是这样的。

total cost = total_quantity * cost
//for each field or row.

在计算成本时,我希望将该值乘以它的相应数量字段。

就像是

var cost = $('.est_quantity').val * $('.est_cost').val();

我试着这样做

$('.est_cost').live('keyup', function(){
    var val = 0.00;
    $('.est_cost').each(function() {
        if($(this).val().length && $(this).val() != '') {
            var cost = $(this).val() * $('.est_quantity').val();
            val += parseFloat(cost);
            $('.est_total_cost').html(val.toFixed(2));
        }
    });
});

上面的代码只为第一行获取正确的计算,其余的它获取一些奇怪的值。

我如何使用代码进行正确计算?

PS:最初只有一行输入字段,包括数量和成本输入字段,其余输入字段在点击事件时动态添加。

谢谢你

4

4 回答 4

1
$(document).on('keyup', '.est_cost, .est_quantity', function(){
    var result = 0,
        $cost = $('.est_cost'),
        $quant = $('.est_quantity');

    $.each($cost, function(i) {
        var costVal = parseFloat( $cost.eq(i).val() ),
            quantVal = parseFloat( $quant.eq(i).val() );

        if (quantVal && costVal) {
            result += costVal * qantVal;
        }
    });

    $('.est_total_cost').text( result.toFixed(2) );
});
于 2012-05-04T08:07:30.827 回答
1

在第二个代码示例中.. 您应该注意有多个具有类的元素,.est_quantity当您迭代具有.est_cost类的元素时,您必须选择一个。
像这样的东西

$('.est_cost').live('keyup', function(){
    var val = 0.00;
    $('.est_cost').each(function(i) {
        if($(this).val().length && $(this).val() != '') {
            var cost = $(this).val() * $('.est_quantity').eq(i).val();
            val += parseFloat(cost);
            $('.est_total_cost').html(val.toFixed(2));
        }
    });
});

请注意,我使用index每个函数的参数。.est_quantity注意:- 假设和.est_cost元素的数量相等

于 2012-05-04T08:07:42.700 回答
1
$('.est_cost').each(function(index,val) {
        if($(this).val().length && $(this).val() != '') {
            var cost = $(this).val() * $('.est_quantity:eq('+ index +')').val(); //here eq(index) maintain the order
            val += parseFloat(cost);
            $('.est_total_cost').html(val.toFixed(2));
        }
    });
于 2012-05-04T08:08:01.457 回答
0

.val()返回一个数组。您将需要parseFloat()parseInt()在执行计算之前。

于 2012-05-04T08:01:26.007 回答