2013-04-11 45 views
2

这是一个基本的html/javascript代码,但我有问题获得所有字段的总和。 (的是在原有项目50场,但现在我刚刚离开5问题总和字段

如果该字段为空,它只是忽略它,并添加只有那些充满领域。

HTML代码:

value1:<input type="text" id="total_1" ><br> 
value2:<input type="text" id="total_2" ><br> 
value3:<input type="text" id="total_3" ><br> 
value4:<input type="text" id="total_4" ><br> 
value5:<input type="text" id="total_5" ><br> 
total:<input type="text" id="totalresult" > 
<button type="button" onclick="getTotal(); return false;">Get total</button> 

的Javascript:

function getTotal() { 
var sum; 
for (i = 1; i <=5 ; i++) { 
    var total = document.getElementById('total_' + i.toString()).value; 
    if (total != '') { 
     sum = parseFloat(total) + sum; 
     document.getElementById('totalresult').value = sum; 
    } 

    } 

} 

我不知道为什么我的代码不能正常工作。

这是我Fiddle

+0

检查我更新的答案。 – defau1t 2013-04-12 06:54:15

回答

1

你需要做两件事情。 1,初始化和为零。 2,检查输入值是否为数字。

function getTotal() { 
    var sum = 0; 
    for (i = 1; i <= 5; i++) { 
     var total = document.getElementById('total_' + i).value; 
     if (!isNaN(parseFloat(total))) sum = parseFloat(total) + sum; 
     document.getElementById('totalresult').value = sum; 
    } 
} 

jsFiddle example

3

代码第一次运行时,总和将是不确定的。

初始化

var sum = 0; 

而且使其在拨弄工作,你需要改变

在onLoad左侧顶部为“不循环 - 在”

+0

感谢回复@ParthikGosar尝试过,但问题仍然存在 – 2013-04-11 18:56:08

1

我不知道为什么你的小提琴不能想出让getTotal成为一个全球性的。但是你的主要问题是总和未定义为开始。这将导致NaN(非数字):

var sum; 

sum = 1 + sum; // NaN 

....

sum = 1 + undefined; // NaN 

sum = 1 + NaN; // NaN 

Demo at jsbin.com

你应该首先设置总和为零:

var sum = 0; 
for (...) { ... 

Working demo as adrianp pointed out: It would probably be more clear if you uploaded the working code to jsbin.

+0

如果您将工作代码上传到jsbin,可能会更清楚。 – adrianp 2013-04-11 19:02:57

1

您还没有定义sum变量,所以javascript将其作为NaN,这意味着不是数字。你需要初始化它来设置它。

function getTotal() { 
      var sum = 0; 
    for (i = 1; i <=5 ; i++) { 
    var total = document.getElementById('total_' + i.toString()).value; 
if(isNaN(total) || total.indexOf(' ') == 1) { 
    alert("Please type a number"); 
    document.getElementById("totalresult").value = "I cant sum alphanumerics"; 
    return false; 
} 

if (total != '') { 
    sum = parseFloat(total) + sum; 
    document.getElementById('totalresult').value = sum; 
} 

}}

FIDDLE

+0

如果在字段中键入空格或非数字字符,则不起作用。 – j08691 2013-04-11 19:02:33

+1

@ j08691很难相信OP正在考虑生产代码。 – adrianp 2013-04-11 19:04:09

+0

@ j08691:谢谢,我为字母数字编辑了一些代码。 – defau1t 2013-04-12 06:53:44

0

使用IsNumeric功能检查输入字段有一个有效的数字。请参阅:Validate decimal numbers in JavaScript - IsNumeric()

这里是我的建议,以提高代码中的for循环:

var elementValue = document.getElementById('total_' + i).value 
IsNumeric(elementValue) ? elementValue : elementValue = 0;