1

请帮我解决这个问题。我有如下的Javascript:

function calc() {
  var table = document.getElementById(tableNum);
  var rowCount = table.rows.length;
  for (var i = 0; i < rowCount; i++) {
    var totalNum[i] = document.formNum.txt1[i].value * document.formNum.txt2[i].value;
    document.getElementById('totalCalc[' + i + ']').innerHTML = totalNum;
  }
}

像这样的HTML:

<table id="tableNum">    
<form name="formNum" action="" id="formNum">
<tr>
<td><input type="text" name="txt1[]" onkeyup="calc()"/></td>
<td><input type="text" name="txt2[]" onkeyup="calc()"/></td>
<td><span id="totalCalc[]"></span></td>
</tr>
</form>
</table>

输入字段的数量未知。没有错误,但 totalCalc 字段为空。请告诉我我做错了什么。谢谢。

编辑:对不起,我忘了提到两个输入字段都在一个表中。请检查编辑后的代码。谢谢。

编辑:我实际上正在开发一个演示,其中表行的数量由用户定义,通过单击插入行按钮。

编辑:感谢特拉维斯的代码。经过一些更改,代码现在可以工作了。但只有第一行有效。我正在考虑获取行的长度并为文本字段使用 for 循环。<input type="text" name="txt1[<?php echo $rowLength;?>]" onkeyup="calc()"/>有没有人有其他想法?谢谢。

4

4 回答 4

1

第一件事似乎是错误的

document.getElementById(tableNum);

应该

document.getElementById("tableNum");

第二,

var totalNum[i] =

应该

var totalNum =

另外,它不起作用,您可以通过firebug或chrome的集成开发工具调试快速找到它。这也将帮助您进行语法验证。

于 2013-01-02T07:03:10.550 回答
1

这是正在发生的事情。

HTML优先

如果您要通过索引引用这些,请使用适当的索引,如下所示

name="txt1[0]"
name="txt2[0]"
<span id="totalCalc[0]">

Javascript

document.getElementById(tableNum);

getElementsById需要一个字符串,所以这应该是

document.getElementById("tableNum");

由于您正在迭代,因此您只需要其中一个变量,因为它会立即使用(而不是整个数组):

var totalNum =代替var totalNum[i]

当您使用点符号访问表单时,名称中的括号会搞砸,您需要这样做:

document.formNum["txt1["+i+"]"].value代替document.formNum.txt1[i].value

瓦拉

当您进行这些细微的更改时,您使用的代码实际上会产生正确的结果:) 请参阅此工作演示:http: //jsfiddle.net/69Kj7/,此外,这是一个有 2 行的演示:http://jsfiddle。净/69Kj7/1/

作为参考,这是演示中的代码:

html:

<table id="tableNum">    
<form name="formNum" action="" id="formNum">
<tr>
<td><input type="text" name="txt1[0]" onkeyup="calc()"/></td>
<td><input type="text" name="txt2[0]" onkeyup="calc()"/></td>
<td><span id="totalCalc[0]"></span></td>
</tr>
</form>
</table>​

js:

function calc() {
 var table = document.getElementById("tableNum");
 var rowCount = table.rows.length;
 for (var i = 0; i < rowCount; i++) {
  var totalNum = document.formNum["txt1["+i+"]"].value * document.formNum["txt2["+i+"]"].value;
  document.getElementById('totalCalc[' + i + ']').innerHTML = totalNum;
 }
}​
于 2013-01-02T07:23:57.143 回答
1

如果你想使用纯 java 脚本,这里是逻辑代码

html

<form name="formNum" id="formNum" action="" >
<input type="text" name="foo[]" onkeyup="calc()" value="5"/>
<input type="text" name="foo[]" onkeyup="calc()" value="12"/>
<span id="totalCalc"></span>
</form>

​</p>

js

var inputs = formNum["foo[]"];
var total = 1;
alert(inputs.length);
for (var i = 0; i < inputs.length; i++) {
    total *= inputs[i].value;
}

alert(total);

working DEMO

于 2013-01-02T07:24:22.020 回答
0

我已经想出了如何解决这个问题。只需在 之后插入数组totalCalc,但不在totalCalc.

非常感谢你们帮助我:)

于 2013-01-05T05:55:52.163 回答