Получить TextBox с помощью JavaScript - PullRequest
1 голос
/ 03 января 2011

У меня есть GirdView в режиме редактирования с TextBox внутри.

Мне нужно получить этот TextBox с идентификатором (из исходного кода в браузере) в JavaScript.

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 ]

1 голос
/ 03 января 2011

Если вы используете ASP.Net 4.0, вы можете использовать ClientIdMode = Статический или Предсказуемый для этого элемента управления.

0 голосов
/ 14 октября 2013

Вы можете определить свою сетку следующим образом:

 <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 текстового поля. Когда эта функция вызывается одновременно, она передает параметр который является ничем иным, как идентификатором текстового поля.

Внутри функции JavaScript, используя параметр, который является Идентификатор текстового поля мы получаем vaue.

Вот код:

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

Тогда Для каждого из элементов управления "txtPeriod", доступных внутри сетки, нам нужно назначить значение текущего значения текстового поля "txtPeriod" для них.

Looping Grid для идентификации каждого доступного «txtPeriod»: Вот код:

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

 });

Внутри этого цикла нам нужно присвоить значение "txtPeriod" (current / Modified) другим Текстовые поля "txtPeriod". Перед назначением рекомендуется проверять, является ли он нулевым или NAN.

Вот код:

               if ($.trim($(this).val()) != "")
                 if (!isNaN($(this).val())) {
                     $(this).val(cntNbr);
                 }
0 голосов
/ 03 января 2011
encodeMyHtml('<%# UniqueID.Replace("$", "_") %>_FormViewContentManager_ContentTextBox')

Это приведет к

encodeMyHtml('ctl00_MainContent_uxListOptions_ctl02_uxValueInput_FormViewContentManager_ContentTextBox')

Существует ли контроль этого идентификатора в вашей DOM?

Кажется, вы делаете много предположений относительно того, как будут создаваться идентификаторы. Было бы лучше сразу ссылаться на ContentTextBox.ClientID.

Примерно следующее, при условии, что ContentTextBox является действительной ссылкой на текстовое поле:

encodeMyHtml('<%# ContentTextBox.ClientID %>')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...