我有一些输入字段
<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:最初有一行输入字段,包括数量和成本输入字段,其余输入字段是在点击事件时动态添加的。
谢谢
答案 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()
。