onchange事件在编辑同一字段后重复计算

时间:2013-06-03 11:27:48

标签: javascript loops concatenation onchange

我有一个javascript如下:

function calculateBill(id,price)
 {

var t = document.getElementById('total').value;


var qty = document.getElementById('qty_'+id).value;

var total = qty * price;


var tcost = Number(t) + Number(total);

document.getElementById('total').value = '';

//tcost = parseFloat(tcost);

document.getElementById('total').value = tcost.toFixed( 0 ) ;   
}

在onchange事件中调用此函数 <input type="text" id = "qty_<?php echo $i2; ?>" name="qty_<?php echo $i2; ?>" onchange="calculateBill('<?php echo $i2; ?>','<?php echo round($r2[$i2]['ret_price'],2); ?>')" /> 由于它是一个onchange事件,它会在我更改值时计算总成本。 现在我的问题是,当我想更新先前输入的值时,它会计算新旧总金额。

(假设数量的前一个值是2,速率是5,所以

5 * 2 = 10

因此javascript函数的总数为10

现在如果我将quanity编辑为1,输入5 * 1 = 5,我将获得10 +(5 * 1)= 15! ) 我怎么能阻止这个?

2 个答案:

答案 0 :(得分:0)

有一个隐藏的字段

<input type="hidden" id="hidden_total"/>

使隐藏字段值在加载表单时具有初始总值。

现在,在函数内部,使用hidden_​​total值添加​​并在完成计算后将其设置为0.

function calculateBill(id,price)
{
 var t = document.getElementById('hidden_total').value;
 var qty = document.getElementById('qty_'+id).value;
 var total = qty * price;
 var tcost = Number(t) + Number(total);
 document.getElementById('total').value = tcost.toFixed( 0 ) ;   
}

根据您的需要,您可能需要在计算后更新隐藏字段的值。在这种情况下,请在最后一行添加以下内容;

 document.getElementById('hidden_total').value = '';   

答案 1 :(得分:0)

为旧总计使用隐藏值,如

<input type="hidden" id="old_total" value="<?=$total?>">

仅供计算使用ID old_total

var t = document.getElementById('old_total').value;

并显示输出使用ID total

document.getElementById('total').value = tcost.toFixed( 0 ) ;