2017-04-04 55 views
1

有一个客户端,我已经为此构建了一个简单的表单进行基本计算。有6次下跌,都包含N/A,1,2,3。最后,从这些下跌中计算总体平均值。客户端想要完全忽略包含N/A含义的任何下拉菜单,如果N/A在6个下拉菜单中的2个下拉菜单中,那么平均值只应该在4个下拉菜单上计算。如果用户选择了N/A,我只是在逻辑上丢失或者如果声明需要告诉整个字段忽略某个下拉字段。 这是我的代码,不工作..请提出一些想法。如何从不包含“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> 
+1

哪里是你的代码? –

+1

代码现在可见.. –

+0

@DebasishChoudhury如果一个答案帮助了你,你应该接受它。 – Feathercrown

回答

1

在这里你去! @Shakti Phartiyal的答案解释了那些错误的东西。

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>

+0

谢谢你完美的工作 –

+1

不客气!总是乐于提供帮助。如果这个答案对你有帮助,你应该[接受它](http://stackoverflow.com/help/accepted-answer)。 – Feathercrown

+0

我接受了它...再次感谢你... –

2

第一:

在你的声明:

<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++) 
 
    { 
 
    \t if(boxes[i].value != "N/A") 
 
    { 
 
    \t alert(boxes[i].value); 
 
    \t 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>