我在jsp中有一个表有3列 - num1,num2,sum
<table>
<tr>
<td>
Number1
</td>
</tr>
<tr>
<td>
Number2
</td>
</tr>
<tr>
<td>
Sum
</td>
</tr>
<s:iterator value="transactionList" var="row" status="status" >
<tr>
<td>
<s:textfield name = "num1" id="num1" onblur="fnSum();" />
</td>
<td>
<s:textfield name = "num2" id="num2" onblur="fnSum();" readonly="true" />
</td>
<td>
<s:textfield name = "sum" id="sum" />
</td>
</tr>
</s:iterator>
<script type="text/javascript">
function fnSum()
{
var num1 = parseInt(document.getElementById("num1").value);
var num2 = parseInt(document.getElementById("num2").value);
var total = num1 + num2;
document.getElementById("sum").value = total;
}
</script>
我想自动为每一行显示总和。上面的代码仅适用于第一行,但不适用于其他行。我不知道该怎么做。提前致谢
答案 0 :(得分:0)
正如@Ramesh所说,你在每一行使用相同的ID,这是你的问题。您需要根据每一行生成动态ID。一种方法是使用status
中的<s:iterator />
属性。
此外,您的JavaScript代码具有硬编码ID,因此表中具有正确ID的事件不起作用。以下是您的解决方案:
<s:iterator value="transactionList" var="row" status="status" >
<tr>
<td>
<s:textfield name="row%{#status.count}-num1" id="row%{#status.count}-num1" onblur="fnSum('row%{#status.count}');" />
</td>
<td>
<s:textfield name="row%{#status.count}-num2" id="row%{#status.count}-num2" onblur="fnSum('row%{#status.count}');" readonly="true" />
</td>
<td>
<s:textfield name="row%{#status.count}-sum" id="row%{#status.count}-sum" />
</td>
</tr>
</s:iterator>
<script type="text/javascript">
function fnSum(row)
{
var num1 = parseInt(document.getElementById(row + "-num1").value);
var num2 = parseInt(document.getElementById(row + "-num2").value);
var total = num1 + num2;
document.getElementById(row + "-sum").value = total;
}
</script>
注意:此代码尚未经过测试,因为我不使用Struts。还想知道为什么你没有显示var="row"
的任何值?