0

我有一个如下的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

现在,如果我将数量编辑为 1,插入 5*1 = 5,我将得到 10 + ( 5 * 1) = 15 !) 我怎样才能防止这种情况发生?

4

2 回答 2

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 = '';   
于 2013-06-03T11:38:07.870 回答
0

对旧总数使用隐藏值,例如

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

仅用于计算使用 idold_total

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

并显示输出使用 idtotal

document.getElementById('total').value = tcost.toFixed( 0 ) ; 
于 2013-06-03T11:57:01.680 回答