我很难得到计算平均值的函数。它一直返回NaN
我不知道为什么会发生这种情况,但我已经把代码样本放在jsfiddle上进行审查。如有任何帮助,不胜感激。
http://jsfiddle.net/Q6GQs/3/ /* This function calculates the sum and average for assignments that have been completed.*/
function assignmentGrade () {
var inputs = document.getElementById("assignments").getElementsByTagName("input");
var i;
var sum = 0;
for (var i = 0, num = inputs.length; i < num; i++) {
{
sum += parseInt(inputs[i]);
}
var average = sum / inputs.length;
}
document.getElementById('asumm').innerHTML = sum;
}
var fieldset = document.getElementById('assignments');
var inputs = fieldset.getElementsByTagName('input');
for (var i = 0, num = inputs.length; i < num; i++)
{
inputs[i].addEventListener('change', assignmentGrade);
}
您需要指明您想要使用输入的值:
if(inputs[i].value != '')
sum += parseInt(inputs[i].value);
http://jsfiddle.net/Q6GQs/4/注意,这将根据所有输入的数量计算平均值,无论它们是否为空。
你有几个问题…
首先,您需要使用输入的值,而不是尝试解析输入本身:
sum += parseInt(inputs[i].value);
第二,你试图解析几个空文本框,这些文本框返回NaN
,并与NaN
相加得到NaN
。先检查文本框是否为空:
if(inputs[i].value != '')
{
sum += parseInt(inputs[i].value);
}
另一件事是,你的平均计算是在循环的每次迭代中进行的,这是不必要的:
for (var i = 0, num = inputs.length; i < num; i++)
{
if(inputs[i].value != '')
{
sum += parseInt(inputs[i].value);
}
}
var average = sum / inputs.length;
sum需要作为给出NaN的输入值,而average需要在for循环之外计算,这应该可以工作:
function assignmentGrade ()
{
var inputs = document.getElementById("assignments").getElementsByTagName("input");
var i;
var sum = 0;
for (var i = 0, num = inputs.length; i < num; i++) {
{
if(inputs[i].value > 0) {
sum += parseInt(inputs[i].value);
}
}
}
var average = sum / inputs.length;
document.getElementById('asumm').innerHTML = average;
}
var fieldset = document.getElementById('assignments');
var inputs = fieldset.getElementsByTagName('input');
for (var i = 0, num = inputs.length; i < num; i++)
{
inputs[i].addEventListener('change', assignmentGrade);
}