在jsp表中为每一行计算

时间:2013-06-19 18:12:34

标签: html jsp struts2

我在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>

我想自动为每一行显示总和。上面的代码仅适用于第一行,但不适用于其他行。我不知道该怎么做。提前致谢

1 个答案:

答案 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"的任何值?