使用一个简单的网页表格计算平均值



我很难得到计算平均值的函数。它一直返回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);
}

最新更新