获取值并使用jQuery计算

时间:2012-05-04 07:58:59

标签: jquery

我有一些输入字段

<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));
        }
    });
});

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

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

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

谢谢

4 个答案:

答案 0 :(得分: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) );
});

答案 1 :(得分: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元素的数量相等

答案 2 :(得分: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));
        }
    });

答案 3 :(得分:0)

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