Как я могу получить доступ к элементу ASP runat = "server", используя JavaScript? - PullRequest
8 голосов
/ 23 марта 2009

Кажется, все это делают (в постах кода и т. Д.) ... но я не знаю, как: (

всякий раз, когда я пытаюсь манипулировать элементом asp с помощью javascript, я получаю сообщение "element is null" или "document is undefined" и т.д. error .....

javascript обычно работает нормально, но только когда я добавляю атрибут runat = "server", элемент кажется невидимым для моего javascript.

любые предложения будут оценены

Спасибо, Андрей

Ответы [ 4 ]

26 голосов
/ 23 марта 2009

Вероятно, ваш элемент / элемент управления находится в одном или нескольких элементах управления ASP.NET, которые действуют как контейнеры именования (главная страница, ITemplate, Wizard и т. Д.), И это приводит к изменению его идентификатора.

Вы можете использовать «просмотр источника» в своем браузере, чтобы убедиться, что это происходит в отображаемом HTML.

Если ваш JavaScript находится на странице ASPX, самый простой способ временно обойти это - - использовать свойство ClientID элемента . Например, если у вас есть элемент управления с именем TextBox1, на который вы хотите сослаться через JS:

var textbox = document.getElementById('<%= TextBox1.ClientID %>');
3 голосов
/ 23 марта 2009

Создание элемента runat="server" изменяет идентификатор этого элемента на стороне клиента в зависимости от того, в каких контейнерах имен ASP.NET он находится. Поэтому, если вы используете document.getElementById для управления элементом, вам нужно будет передать ему новый идентификатор, сгенерированный .NET. Загляните в свойство ClientId , чтобы получить этот сгенерированный идентификатор ... вы можете использовать его встроенным в свой Javascript следующим образом:

var element = document.getElementById('<%=myControl.ClientID%>');
2 голосов
/ 23 марта 2009

Если у вас есть текстовое поле:

<asp:TextBox id="txtText" runat="server" />

ВЫ можете использовать:

var textBox=document.getElementById('<%=txtText.ClientID %>');

Любой WebControl предоставляет одно и то же свойство ClientID.

1 голос
/ 24 марта 2009

Все, хотя на вопрос был дан ответ, думал, что я просто опубликую некоторую дополнительную информацию ...

Рик Страл представил довольно интересную работу по решению этой проблемы.

http://www.west -wind.com / WebLog / сообщений / 252178.aspx

К счастью, когда появится ASP .NET 4.0, это позволит вам точно указать, какими будут идентификаторы клиента!

http://www.codeproject.com/KB/aspnet/ASP_NET4_0ClientIDFeature.aspx

...