使用JavaScript检索TextBox

时间:2011-01-03 08:02:12

标签: c# javascript gridview textbox

我在编辑模式下有一个带有TextBox的GirdView。

我需要在JavaScript中使用ID(来自浏览器中的源代码)检索此TextBox。

ctl00$MainContent$uxListOptions$ctl02$uxValueInput

但是我收到错误,因为我的JavaScript无法找到TextBox。

以下是代码:

   <span onclick="encodeMyHtml('<%# UniqueID.Replace("$", "_") %>_FormViewContentManager_ContentTextBox')">
        <asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update" Text="[Publish]" />
    </span>

在我的控件的OnPageLoad中,我称之为:

private void addEditorJavaScript()
{
    // create our HTML encoder javascript function
    // this way it shows up once per page that the control is on
    string scr = @"<script type='text/javascript'>function encodeMyHtml(name){
                var content = document.getElementById(name).value
                content = content.replace(/</g,'<');
                content = content.replace(/>/g,'>');
                document.getElementById(name).value = content;
            }</script>";

    // add the javascript into the Page
    ClientScriptManager cm = Page.ClientScript;
    cm.RegisterClientScriptBlock(this.GetType(), "GlobalJavascript", scr);
}

我正在尝试使用此代码http://dustyreagan.com/how-to-submit-html-without-disabling/

任何想法我做错了什么?谢谢你们!

3 个答案:

答案 0 :(得分:1)

如果您使用的是ASP.Net 4.0,则可以对此控件使用ClientIdMode = Static或Predictable。

答案 1 :(得分:0)

encodeMyHtml('<%# UniqueID.Replace("$", "_") %>_FormViewContentManager_ContentTextBox')

这将导致

encodeMyHtml('ctl00_MainContent_uxListOptions_ctl02_uxValueInput_FormViewContentManager_ContentTextBox')

您的DOM中是否存在该ID的控件?

似乎你在如何创建ID方面做了很多假设。最好立即引用ContentTextBox.ClientID

如下所示,前提是ContentTextBox是对文本框的有效引用:

encodeMyHtml('<%# ContentTextBox.ClientID %>')

答案 2 :(得分:0)

您可以像这样定义网格:

 <div>
   <asp:GridView ID="GridView1" runat="server"  Width = "550px"
    AutoGenerateColumns = "false" Font-Names = "Calibri" 
    Font-Size = "12pt" HeaderStyle-BackColor = "LightYellow" AllowPaging ="true"  ShowFooter = "true"  OnPageIndexChanging = "OnPaging" PageSize = "10" >
   <Columns>
      <asp:TemplateField ItemStyle-Width = "100px"  HeaderText = "Name">
        <ItemTemplate>
         <asp:TextBox ID="txtPeriod" runat="server" CssClass="css1 mycss" Text='<%# Eval("Period")%>' 
             onblur="SetPostingPeriod(this)"></asp:TextBox>
        </ItemTemplate>                       
    </asp:TemplateField>   
   </Columns> 
   <AlternatingRowStyle BackColor="#C2D69B"  />
</asp:GridView> 
</div>

你的Javascript功能将是:

<script language="javascript" type="text/javascript">
     /* Populating same data to all the textboxes inside grid, 
     once change of text for one textbox - by using jquery
     */
     function SetPostingPeriod(obj) {

         var cntNbr = $("#" + obj.id).val();
      // var cntNbr = document.getElementById(obj.id).value;
      // alert(cntNbr);

         //Access Grid element by using name selector
         $("#<%=GridView1.ClientID %> input[name*='txtPeriod']").each(function (index) {

             if ($.trim($(this).val()) != "")
                 if (!isNaN($(this).val())) {
                     $(this).val(cntNbr);
                 }
         });
     }
 </script>

这个Javascript函数被称为文本框的onblur事件。   当同时调用此函数时,它传递一个参数  这只是文本框ID。

使用参数是javascript函数   文本框的ID我们得到了vaue。

以下是代码:

      var cntNbr = $("#" + obj.id).val();

然后对于网格内可用的每个“txtPeriod”控件,我们需要分配  当前“txtPeriod”文本框值的值。

循环网格识别每个“txtPeriod”可用:    这是代码:

 $("#<%=GridView1.ClientID %> input[name*='txtPeriod']").each(function (index) {

 });

在这个循环中,我们需要将“txtPeriod”(当前/修改)值分配给其他   “txtPeriod”文本框。在指定其检查的良好做法之前,它是null还是NAN。

以下是代码:

               if ($.trim($(this).val()) != "")
                 if (!isNaN($(this).val())) {
                     $(this).val(cntNbr);
                 }