templateField TextBox的getElementByID

时间:2013-09-10 07:08:21

标签: javascript asp.net

我已经将RowDataBound用于gridview。下面是我的C#代码

protected void gvParameterValue_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            Label lblLocID = (Label)e.Row.FindControl("lblLocationID");
if(condition)
            {
                TextBox txtBox = (TextBox)e.Row.FindControl("txtValue");
                txtBox.Attributes.Add("onchange", "ValueOnChange();");
            }
        }
    }

gridview的Asp.Net代码

<asp:UpdatePanel ID="updatePanel" runat="server">
    <Triggers>
    <asp:AsyncPostBackTrigger ControlID="btnSave" EventName="Click" />
    </Triggers>
    <ContentTemplate>
    <asp:GridView ID="gvParameterValue" SkinID="GridView" runat="server" OnRowDataBound ="gvParameterValue_RowDataBound" AutoGenerateColumns="False">
    <Columns>
        <asp:TemplateField HeaderText="Location Name">

        <asp:TemplateField HeaderText="Parameter Value">
            <ItemTemplate>
                        <asp:TextBox ID="txtValue" SkinID="fineLineTextBox" TabIndex="1" runat="server"  AutoPostBack="false"></asp:TextBox>    
                    <%--<asp:TextBox ID="TextBox1" SkinID="fineLineTextBox" TabIndex="1" runat="server" OnTextChanged="textBox1_textChanged"  AutoPostBack="true"></asp:TextBox>--%>
                    <asp:Label ID="lblPreDayVal" runat="server" Text='<%# Bind("PreviousValue") %>'></asp:Label>
                </ItemTemplate>
        </asp:TemplateField>
    </Columns>
    </asp:GridView>
    </ContentTemplate >
    </asp:UpdatePanel>

js功能如下,我有一个问题

function ValueOnChange()
     {

         var val = document.getElementById('lblPreDayValue').value;


   }

它出错“Microsoft JScript runtime error: Object required” 我已尝试过所有可能的网络解决方案,但没有任何作用...

4 个答案:

答案 0 :(得分:2)

您已在ID getElementById上致电lblPreDayValue。在ASP.NET标记中,您将其称为lblPreDayVal

您可能还想使用ClientID来确保获得.NET生成的正确ID

答案 1 :(得分:2)

您可以在gvParameterValue_RowDataBound方法的绑定步骤中从服务器端传递ClientID,如下所示: -

        TextBox txtBox = (TextBox)e.Row.FindControl("txtValue");
        Label lblVal = (Label)e.Row.FindControl("lblPreDayVal");
        txtBox.Attributes.Add("onchange", "ValueOnChange('" + lblVal.ClientID + "');");

然后在ValueOnChange方法定义中,将参数作为cid传递(比如说)。

function ValueOnChange(cid)
     {
         var val = document.getElementById(cid).innerHTML;
     }

答案 2 :(得分:0)

尝试使用

function ValueOnChange()
     {
         var val = document.getElementById('#<%= lblPreDayVal.ClientID %>').innerHTML;
     }

如果上述din工作那么

function ValueOnChange()
     {
         var val = document.getElementById('lblPreDayVal').innerHTML;
     }

答案 3 :(得分:0)

尝试在values RowBound事件中传递gridview,您尝试访问getElementbyId('lblLocID')无法正常工作,因为在呈现行时它的ID将会更改。

  if (e.Row.RowType == DataControlRowType.DataRow)
        {
            Label lblLocID = (Label)e.Row.FindControl("lblLocationID");
              Label lblPreDayValue =(Label)e.Row.FindControl("lblPreDayValue");
            if (lblLocID.Text.Equals("154") || lblLocID.Text.Equals("168") || lblLocID.Text.Equals("178"))
            {
                TextBox txtBox = (TextBox)e.Row.FindControl("txtValue");
                txtBox.Attributes.Add("onchange", "ValueOnChange(" + lblPreDayValue.ClientID + ");");
            }
        }

ClientID传递给函数后 //或者你可以直接传递label的值并赋值。

function ValueOnChange(ClntID)
     {

         var val = document.getElementById('ClntID').innerHTML;
     }