日期:2014-05-17  浏览次数:20367 次

求解决问题的办法
在一个页面中有一个GRID,它生成的列表中,在每一行都有两个输入框,在其中的一个输入值后,它的值会自动乘以一个数,然后显示到另一个输入框中,如何实现,要不刷新的。

------解决方案--------------------
你的GRID是什么做的?如果是table,那么可以
使用parentNode.parentNode查找到所在的行,然后就可以找到该行的其他输入框了。


------解决方案--------------------
如果两个textbox的位置不相邻,要根据情况修改nextSibling.
C# code

    <form id="form1" runat="server">
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
        <Columns>
            <asp:BoundField DataField="ID" HeaderText="ID" />
            <asp:BoundField DataField="Name" HeaderText="Name" />
            <asp:TemplateField HeaderText="InputOne">
                <ItemTemplate>
                    <asp:TextBox ID="TextBox1" runat="server" onblur="Caculate(this)"></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="InputTwo">
                <ItemTemplate>
                    <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
        </asp:GridView>
    <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
        <script type="text/javascript">
            function Caculate(obj){
                if(obj.value.length<=0){
                    return;
                }
                var ct = 5;
                var PN = obj.parentNode;
                while(PN.tagName!="TD")
                    PN=PN.parentNode;
                var nt = PN.nextSibling;
                while(nt.tagName!="TD")
                    nt = nt.nextSibling;
                var ntTxt = nt.firstChild;
                ntTxt.value = ct*obj.value;
            }
        </script>
    </form>