2011-11-20 91 views
0

我有这样的代码:输出数量翻倍

<script type="text/javascript"> 
function showTotal(form, totalEl) 
{ 
    var el, els = form.elements; 
    var sum = 0; 

    for (var i=0, num=els.length; i<num; ++i){ 
    el = els[i]; 

    if ('text' == el.type){ //&& /SumB/.test(el.name) 
     sum += +el.value; 
    } 
    form.elements[totalEl].value = sum; 
    } 
} 
</script> 

如果我使用提醒我得到正确的输出,但它充满了错误的数值为“totalEl”你可以测试这个(固定)它是第一复选框和文本框块!

+2

如果总元素本身就是一个元素,你是否也将它添加到自身?也许采取一些除了最后一个*的所有元素*! – BrendanMcK

+0

哇!你的天才!为什么我没有想到这一点;)现在尝试 – Lorof

回答

0

它的工作原理,如果你尝试

<script type="text/javascript"> 
function showTotal(form, totalEl) 
{ 
    var el, els = form.elements; 
    var sum = 0; 

    for (var i=0, num=els.length; i<num; ++i){ 
    el = els[i]; 

    // Do not include totalEl 
    if ('text' == el.type && el != form.elements[totalEl]) { 
     sum += +el.value; 
    } 
    } 
    form.elements[totalEl].value = sum; 
} 
</script> 

如果totalEl的形式是一个元素,那么form.elements[totalEl].value = sum;线必须是for循环外,否则totalEl本身的价值将被纳入最后的计算,导致双重结果。

+0

在循环内部它会反复设置它,但这只是效率低下,而不是问题。 –

+0

然后尝试从总和中排除'totalEl'的值:'if('text'== el.type && el!= form.elements [totalEl])...' – Luc125

+0

谢谢我修复了循环和事件问题!!谢谢您的帮助 – Lorof

0

它会将值添加到“sum”文本元素中,以及它现在写入的方式。使用一个类,或者在添加之后从新的总数中减去当前的总数,或者只是在循环之前将元素置零。

正如其他答案所提到的那样,设置“总和”字段的部分也不应该在循环中。