2012-02-09 5 views
1

Я получил две секции с выставлением счетов и адресом доставки в DataList:Как получить идентификатор asp.net режима многострочного текстового поля в управлении DataList с помощью JQuery

<asp:DataList ID="dldirectory" runat="server" Width="100%" 
    RepeatColumns="1" EnableViewState="False" DataKeyField="Id" > 
    <ItemTemplate> 

         <asp:TextBox ID="txtBillingAddress" runat="server" Text='<%# Eval("BillingFullAddress") %>' TextMode="MultiLine" Width="200" Height="150"></asp:TextBox> 

         <asp:CheckBox ID="chkCopy" runat="server" Text="Same as Billing Address." /> 

         Address: 
         <asp:TextBox ID="txtDeliveryAddress" runat="server" Text='<%# Eval("DeliveryFullAddress") %>' TextMode="MultiLine" Width="200" Height="150"></asp:TextBox> 
         </ItemTemplate> 

      <ItemStyle Width="50%" /> 
     </asp:DataList> 

      <script type="text/javascript"> 

    $(document).ready(function() { 
     $('input:checkbox[id*=chkCopy]').change(function() { 
      if ($(this).is(':checked')) {$('input:text[id*=txtDeliveryAddress]').val($('input:text[id*=txtBillingAddress]').val()); } 
     }); 
    }); 

Данный скрипт отлично работает только в режиме текстового поля установлен на единицу, и текст, отображаемый на адресе доставки, копируется и вставляется на txtBillingAddress, когда флажок установлен, но когда текстовый режим установлен в многострочный, jquery терпит неудачу, поскольку textarea отображается другим способом.

Любые идеи о том, как получить то же самое с текстовым полем asp.net, установленным в многострочный режим.

Благодаря

ОБНОВЛЕНО HTML:

<textarea name="ctl00$MainContent$CustomersDefaultPaging$ctl00$txtBillingAddress" rows="2" cols="20" id="ctl00_MainContent_CustomersDefaultPaging_ctl00_txtBillingAddress" style="height:150px;width:200px;"></textarea> 

+0

При написании Javascript, это бессмысленно думать о коде на стороне сервера. Посмотрите на визуализированный HTML и напишите свой Javascript для соответствия. – lonesomeday

ответ

1

При использовании textbox управления в многострочного режиме он оказывает текстовое поле так, соответственно, ваш селектор должен быть другим. input:text селектор будет искать поля ввода типа text, он не будет выбирать textarea. Попробуй это.

$(document).ready(function() { 
     $('input:checkbox[id*=chkCopy]').change(function() { 
      if ($(this).is(':checked')) { 
       $('textarea[id*=txtDeliveryAddress]') 
       .val($('textarea[id*=txtBillingAddress]').val()); 
      } 
     }); 
    }); 

Поскольку это DataList я уверен, что у вас есть несколько элементов на странице Таким образом, в приведенном выше коде, вы должны передать контекст при выборе, используя флажок элемент TEXTAREA как ссылки. Попробуйте

$(document).ready(function() { 
     $('input:checkbox[id*=chkCopy]').change(function() { 
      if ($(this).is(':checked')) { 
       //Assuming every item is rendered as a separate table 
       //If it is inside a div the change it to div 
       var $parent - $(this).closest('table'); 
       $parent.find('textarea[id*=txtDeliveryAddress]') 
       .val($parent.find('textarea[id*=txtBillingAddress]').val()); 
      } 
     }); 
    }); 
0

Вы пытались выбрать текстовое поле, используя его ID,

$('#<%= txtDeliveryAddress.ClientID %>') 

Если вы используете идентификатор, чтобы выбрать его вместо того, чтобы вы потом не нужно беспокоиться о том, как это делает тег в сторона клиента.

1

Если вы используете .Net 4, то я предлагаю вам изучить свойство этих элементов управления ClientIDMode. Вы действительно можете заставить их использовать идентификатор, который намного дружелюбнее к javascript.

http://weblogs.asp.net/scottgu/archive/2010/03/30/cleaner-html-markup-with-asp-net-4-web-forms-client-ids-vs-2010-and-net-4-0-series.aspx

+0

i can not set clientidmode to static as i m using datalist –

+0

@MrA: В этом случае у меня, вероятно, будет определенный класс CSS, который идентифицирует рассматриваемые компоненты и позволит jQuery найти элементы управления именами классов. – NotMe