2017-04-04 74 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>