2017-01-06 81 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