使用javascript访问动态表行的值

时间:2012-08-09 08:42:29

标签: javascript html

我正在编写一个用于创建动态表的js代码,每行3列,即

  1. textbox1 | textbox2 | textbox3
  2. textbox1 | textbox2 | textbox3 ..
  3. 我要做的是获取textbox1和textbox2的值,并在文本框3中显示这些值的乘法结果。

    但我的脚本无效.. 请建议补救措施或更好的方法......

    代码:

    function addRowToTable() {
      var tbl = document.getElementById('tblSample');
      var lastRow = tbl.rows.length;
    
      // if there's no header row in the table, then iteration = lastRow + 1
      var iteration = lastRow;
      var row = tbl.insertRow(lastRow);
    
      // left cell
      var cellLeft = row.insertCell(0);
      var textNode = document.createTextNode(iteration);
      cellLeft.appendChild(textNode);
    
      var cellRight = row.insertCell(1);
      var el = document.createElement('input');
      el.setAttribute('type', 'text');
      el.setAttribute('id', 'f1' + iteration);
      el.setAttribute('size', '22');
      cellRight.appendChild(el);
    
      var cellRight = row.insertCell(1);
      var el = document.createElement('input');
      el.setAttribute('type', 'text');
      el.setAttribute('id', 'f2' + iteration);
      el.setAttribute('size', '20');
      cellRight.appendChild(el);
    
      var cellRight = row.insertCell(1);
      var el = document.createElement('input');
      el.setAttribute('type', 'text');
      el.setAttribute('id', 'f3' + iteration);
      el.setAttribute('size', '20');
      cellRight.appendChild(el);
    }
    
    function removeRowFromTable() {
      var tbl = document.getElementById('tblSample');
      var lastRow = tbl.rows.length;
      if (lastRow > 2) tbl.deleteRow(lastRow - 1);
    }
    
    function store3() {
      var tbl = document.getElementById('tblSample');
      var rowIterator = tbl.rows.length;
      var z = document.getElementById("f3");
      z.value = (document.getElementById("f1").value) * (document.getElementById("f2").value) * 1;
    }
    

    表格是这样的:

    <form action="tableaddrow_nw.html" method="get">
    <input type="button" value="Add Position" onclick="addRowToTable();" />
    <input type="button" value="Remove Position" onclick="removeRowFromTable();" />
    <table border="1" id="tblSample">
    <tr>
    <td><input type="text" name="f1" id="f1" size="20" onkeyup="store3()"/></td>
    <td><input type="text" name="f2" id="f2" size="20" onkeyup="store3()"/></td>
    <td><input type="text" name="f3" id="f3" size="20" /></td>
    </tr>
    </table>
    </form>
    

2 个答案:

答案 0 :(得分:1)

我修改了你的代码,它应该在你添加新行时相乘,

以下是Working Demo

<强> HTML

<form action="tableaddrow_nw.html" method="get">
<input type="button" value="Add Position" onclick="addRowToTable();" />
<input type="button" value="Remove Position" onclick="removeRowFromTable();" />
<table border="1" id="tblSample">
    <tr>
        <td><input type="text" name="f1" id="f1" size="20" onkeyup="store3('f1','f2', 'f3')"/></td>
        <td><input type="text" name="f2" id="f2" size="20" onkeyup="store3('f1','f2', 'f3')"/></td>
        <td><input type="text" name="f3" id="f3" size="20" /></td>
    </tr>
</table>

<强> SCRIPT:

function addRowToTable()
{

var tbl = document.getElementById('tblSample');
var lastRow = tbl.rows.length;
// if there's no header row in the table, then iteration = lastRow + 1
var iteration = lastRow;
var row = tbl.insertRow(lastRow);
// left cell
var cellLeft = row.insertCell(0);
var textNode = document.createTextNode(iteration);
cellLeft.appendChild(textNode);
var cellRight = row.insertCell(1);
var el = document.createElement('input');
el.setAttribute('type', 'text');
el.setAttribute('id', 'f1' + iteration);
el.setAttribute('size', '22');
el.onkeyup = function(){store3('f3' + iteration,'f2' + iteration, 'f1' + iteration)}
cellRight.appendChild(el);
var cellRight = row.insertCell(1);
var el = document.createElement('input');
el.setAttribute('type', 'text');
el.setAttribute('id', 'f2' + iteration);
el.setAttribute('size', '20');
el.onkeyup = function(){store3('f3' + iteration,'f2' + iteration, 'f1' + iteration)}
cellRight.appendChild(el);
var cellRight = row.insertCell(1);
var el = document.createElement('input');
el.setAttribute('type', 'text');
el.setAttribute('id', 'f3' + iteration);
el.setAttribute('size', '20');
el.onkeyup = function(){store3('f3' + iteration,'f2' + iteration, 'f1' + iteration)}
cellRight.appendChild(el);
}

function removeRowFromTable()
{

var tbl = document.getElementById('tblSample');
var lastRow = tbl.rows.length;
if (lastRow > 2) tbl.deleteRow(lastRow - 1);
}

function store3(t1, t2, t3)
{

var tbl = document.getElementById('tblSample');
var rowIterator = tbl.rows.length;
var z=document.getElementById(t3);
z.value=(document.getElementById(t1).value)*(document.getElementById(t2).value)*1;

}

答案 1 :(得分:0)

您的JavaScript代码是指硬编码的元素ID,因此它永远不会与任何其他ID一起使用。
我建议您对现有行使用与在脚本中创建的行相同的命名约定。还要为每个行提供一个id,并将该id传递给你的store3()函数[你应该真的称之为computeSum()或类似的东西,总是更好地拥有有意义的名字] - 然后你可以找出动态id传递给函数的每个字段的id。