2009-06-13 5 views
0
<asp:DataGrid> 
    <ItemTemplate> 
     1) 
     <asp:TextBox ID="tbComments" onChange="javascript:checkLength(<%# tbComments.ClientId %>);" runat="server"/> 
     2) 
     <span id="<%# tbComments.ClientId %>Label"></span> 
    </ItemTemplate> 
</asp:DataGrid> 

Любые идеи сделать вышеуказанные работы (а это не так: P)?Как я могу получить идентификатор клиента связанного элемента управления с метками javascript и/или серверной?

ответ

3

Измените свою разметку, чтобы передать «это» в качестве ссылки на данный раздел комментариев.

<asp:TextBox ID="tbComments" 
      onChange="javascript:checkLength(this);" runat="server"/> 

Затем в функции checkLength(), «е» является прямой ссылкой на элемент DOM, который поднял OnChange событие.

function checkLength(e){ 
    alert(e.id); //id of the comments box 
    //get a reference to the span element immediately after the textbox 
    theSpan = e.parentNode.getElementsByTagName("span")[0]; 
    theSpan.innerHTML = "comments length: " + e.value.length; 
} 
+0

Я бы предпочел использовать e.parentNode.getElementById, Я пробовал, и это не сработало для меня, есть ли способ? – Shimmy

+0

Поскольку идентификаторы динамически генерируются, единственный способ получить ссылку на диапазон - по его положению. –

+0

Идентификатор клиента на этикетке совпадает с идентификатором клиента текстового поля с суффиксом «Ярлык», поэтому, если вы его знаете, вы знаете другого. –

0

Уверены ли вы, что проблема заключается не только в неправильном использовании «ClientId» в следующем теге? :-)

<span id="<%# tbComments.CliendId %>Label"></span> 
+0

Извините, вы правы, но это не проблема. Проблема в том, что она генерируется динамически, так как это привязка данных. – Shimmy

0

Есть ли что-то не так с вашей функцией checkLength() JavaScript, не добавляющей ярлык к идентификатору клиента? Тогда ваш Javascript принимать как ?:

<asp:DataGrid> 
    <ItemTemplate> 
     1) 
     <asp:TextBox ID="tbComments" 
      onChange="javascript:checkLength(<%# tbComments.ClientId %>, <%# tbComments.ClientId %>Label);" 
      runat="server"/> 
     2) 
     <span id="<%# tbComments.ClientId %>Label"></span> 
    </ItemTemplate> 
</asp:DataGrid> 
1

Просто добавьте класс в пролете или текстовое поле и использовать JQuery, чтобы найти элемент в DOM и добавить событие изменения в текстовое поле запустить код checkLength

$(document).ready(function() 
{ 
    $('.myClass').change(function() 
    { 
     // do your length check... 
    }); 
}); 
+1

1) Я не использую jQuery в этом проекте 2) где я могу передать ClientId ?? кажется, вы не получили мой вопрос , однако не беспокойтесь, уже ответили. Спасибо за ваши усилия. – Shimmy

+1

<жерех: TextBox ID = CssClass = Runat = "сервер" "tbComments" "MyClass" /> $ (документ) .ready (функция() { $ (»MyClass.) Изменение (функция(). { кубовые текстовое поле = $ (это); вар диапазон = textbox.next(); span.html ('комментарии длина:' +. textbox.val() длина); }); }); – superlogical

+0

люблю тебя, человек. , безусловно, будет использовать его один раз. – Shimmy