如何从不包括"N/A"值的下拉列表中计算平均值



有一个客户端,我已经为它构建了一个简单的表单,可以进行基本计算。 有 6 个下拉列表都包含 N/A、1、2、3。 最后,根据这些下降计算出总体平均值。 客户希望完全忽略任何包含 N/A 的下拉列表,这意味着如果 N/A 在 6 个下拉列表中的 2 个中,则只应根据 4 个下拉列表计算平均值。 我只是迷失了逻辑,或者如果用户选择了 N/A,则需要语句告诉总字段忽略某个下拉字段。 这是我的代码,无法正常工作。.请提出一些想法。

<html>
<head><script type="text/javascript">
var aFieldNames = new Array();
aFieldNames["N/A"]=0;
aFieldNames["1"]=1;
aFieldNames["2"]=2;
aFieldNames["3"]=3;
var nCount = 0;
var nSum = 0;
event.value = 0;
for(i = 0; i < aFieldNames.length; i++)
{
if(this.getField(aFieldNames[i]).valueAsString != "N/A") 
{
nCount++;
nSum += parseFloat(this.getField(aFieldNames[i]).value);
}
}
if(nCount != 0) 
 {
event.getElementById("bpover").value = nSum / nCount;
 }
</script>
</head>
<body>
<select name="Value[]" onChange="alert(this.value):">
 <option name="N/A">N/A</option>
  <option name="1">1</option>
   <option name="2">2</option>
    <option name="3">3</option>
  </select><br>
   <select name="Value[]" onChange="alert(this.value):">
  <option name="N/A">N/A</option>
   <option name="1">1</option>
   <option name="2">2</option>
   <option name="3">3</option>
   </select><br>
    <select name="Value[]" onChange="alert(this.value):">
   <option name="N/A">N/A</option>
   <option name="1">1</option>
    <option name="2">2</option>
    <option name="3">3</option>
    </select><br>
     <select name="Value[]" onChange="alert(this.value):">
   <option name="N/A">N/A</option>
    <option name="1">1</option>
    <option name="2">2</option>
    <option name="3">3</option>
    </select><br>
    <select name="Value[]" onChange="alert(this.value):">
   <option name="N/A">N/A</option>
   <option name="1">1</option>
    <option name="2">2</option>
     <option name="3">3</option>
    </select><br>
    <br>
   avg <input type="text" name="Average" ID="bpover" readonly>
    </body>
    </html>

首先:

在你的声明中:

<select name="Value[]" onChange="alert(this.value):">

您使用的是无用的:而不是使用;

第二:

  • 该方法应遍历所有选择框。
  • 读取没有 N/A 作为值的选择框的值
  • 通过使用 parseFloat()parseInt() 将得到的值转换为数字来计算平均值。
  • 显示它

请参阅下面的代码:

<script>
function calculateAverage()
{
  var boxes = document.getElementsByTagName('select')
  var nSum = 0;
  var nCount = 0;
  event.value = 0;
  for(var i=0; i<boxes.length;i++)
  {
  	if(boxes[i].value != "N/A")
    {
    	alert(boxes[i].value);
    	nSum += parseFloat(boxes[i].value);
      nCount++;
    }
  }
  var avg = nSum/nCount;
  document.getElementById('bpover').value = avg;
}
</script>
<select name="Value[]" onChange="alert(this.value);">
 <option name="N/A">N/A</option>
  <option name="1">1</option>
   <option name="2">2</option>
    <option name="3">3</option>
  </select><br>
   <select name="Value[]" onChange="alert(this.value);">
  <option name="N/A">N/A</option>
   <option name="1">1</option>
   <option name="2">2</option>
   <option name="3">3</option>
   </select><br>
    <select name="Value[]" onChange="alert(this.value);">
   <option name="N/A">N/A</option>
   <option name="1">1</option>
    <option name="2">2</option>
    <option name="3">3</option>
    </select><br>
     <select name="Value[]" onChange="alert(this.value);">
   <option name="N/A">N/A</option>
    <option name="1">1</option>
    <option name="2">2</option>
    <option name="3">3</option>
    </select><br>
    <select name="Value[]" onChange="alert(this.value);">
   <option name="N/A">N/A</option>
   <option name="1">1</option>
    <option name="2">2</option>
     <option name="3">3</option>
    </select><br>
    <br>
    <button onClick="calculateAverage()">
    Calculate
    </button>
    
   avg <input type="text" name="Average" ID="bpover" readonly>

你去吧! @Shakti法蒂亚尔的回答对错误的事情有一个解释。

function calcAvg(){
  //Get all elements with 'class="select"'
  var selects = document.getElementsByClassName("select");
  //Initialize vars
  var avg = 0;
  var count = 0;
  //Calculate average
  for(var i=0;i<selects.length;i++){
    if(selects[i].value!="N/A"){
      count++;
      avg+=Number(selects[i].value);
      //Alert for debugging purposes
      //alert(selects[i].value+" "+avg);
    }
  }
  avg=avg/count;
  //Output average
  document.getElementById("bpover").value=avg;
}
<select class="select" name="Value[]" onChange="calcAvg();">
 <option name="N/A">N/A</option>
  <option name="1">1</option>
   <option name="2">2</option>
    <option name="3">3</option>
  </select><br>
   <select class="select" name="Value[]" onChange="calcAvg();">
  <option name="N/A">N/A</option>
   <option name="1">1</option>
   <option name="2">2</option>
   <option name="3">3</option>
   </select><br>
    <select class="select" name="Value[]" onChange="calcAvg();">
   <option name="N/A">N/A</option>
   <option name="1">1</option>
    <option name="2">2</option>
    <option name="3">3</option>
    </select><br>
     <select class="select" name="Value[]" onChange="calcAvg();">
   <option name="N/A">N/A</option>
    <option name="1">1</option>
    <option name="2">2</option>
    <option name="3">3</option>
    </select><br>
    <select class="select" name="Value[]" onChange="calcAvg();">
   <option name="N/A">N/A</option>
   <option name="1">1</option>
    <option name="2">2</option>
     <option name="3">3</option>
    </select><br>
    <br>
   avg <input type="text" name="Average" id="bpover" readonly>

最新更新