2017-01-06 46 views
0

學生行中有m studentsn criteria列,同一行中有總列。但是隻有在相應行中輸入數字時,總數才能動態計算。需要什麼修改?以這種方式,總結第一行中的所有輸入。但只需要逐行求和。在輸入對應行中的數字時動態計算 - Javascript

<script> 
    var num=[]; 
    function recalculate(rowData,studCode) {   
     var n = document.getElementById('criteria_count').value;  
     num.push(parseFloat(document.getElementById('criteria_mark_'+rowData).value)); 
     var total=0; 

     for (var i = 0; i <n; i++) { 
      total = total + parseFloat(num[i]) ; 
      if (!isNaN(total)) { 
       document.getElementById('total_mark_'+studCode).value = Math.round(total); 
      } 
     }  
    } 
</script> 
+0

你應該在每一行指定列迭代,你的循環不代表。 for循環條件語句表示我

+0

n是criteria_count。我現在糾正了。但仍然存在問題。 – Dayz

+0

您現在正在將criteria_count的.value值轉換爲float值,我不完全確定要在條件語句中使用float值嗎? –

回答

1

希望我能正確理解您的要求。我做了一個JSFiddle,詳細說明如何實現你已經解釋過的內容(假設我正確理解了你)。

https://jsfiddle.net/z0d4y8ao/12/

這看起來通過每個所指定的行,並計算總並把它分開到結果的元素。

如果您使用此代碼請記住,它是原始的JavaScript,並且您將不得不自己找到結果,以便插入總值(親自使用服務器端語言創建唯一ID)。

function calcNewVal(rowID) 
{ 
    var row = document.getElementById(rowID); 
    var tdCount = row.childElementCount - 1; 
    var total = 0; 
    var currentTd = null; 

    var resultText = document.getElementById('result0'); 

    for(var i = 0; i < tdCount; i++) 
    { 
     currentTd = row.children[i].childNodes[0].value; 
     total += parseInt(currentTd); 
    } 

    console.log(total); 

    resultText.innerHTML = total; 
} 

的HTML:

<table id="myTable"> 
<tr> 
    <th>Subject1</th> 
    <th>Subject2</th> 
    <th>Subject3</th> 
    <th>Result</th> 
</tr> 
<tr onchange="calcNewVal(this.id)" id="row0"> 
    <td><input type="text" value="13"></td> 
    <td><input type="text" value="13"></td> 
    <td><input type="text" value="13"></td> 
    <td id="result0"></td> 
</tr> 
<tr id="row1"> 
    <td><input type="text" value="13"></td> 
    <td><input type="text" value="13"></td> 
    <td><input type="text" value="13"></td> 
    <td id="result1"></td> 
</tr> 

+0

_currentTd = row.children [i] .childNodes [0] .value; _顯示未定義。 – Dayz