【问题标题】:Calulate average using a simple web form使用简单的 Web 表单计算平均值
【发布时间】:2014-07-14 17:08:45
【问题描述】:

我无法获得计算平均值的函数。它不断返回 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);
}

【问题讨论】:

  • 如果输入的数字少于七个,是应该按照七个数字计算平均值,还是只输入值的个数?

标签: javascript average


【解决方案1】:

你需要表明你想使用输入的

if(inputs[i].value != '')
    sum += parseInt(inputs[i].value);

http://jsfiddle.net/Q6GQs/4/

请注意,这将根据所有输入的数量计算平均值,无论它们是否为空。

【讨论】:

    【解决方案2】:

    你有几个问题...

    首先,您需要使用输入的值,而不是尝试解析输入本身:

    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;    
    

    【讨论】:

      【解决方案3】:

      sum 需要是给出 NaN 的输入值,并且平均值需要在 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);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-10
        相关资源
        最近更新 更多