2009-03-23 24 views
7

Parece que todos están haciendo esto (en mensajes de código, etc.) ... pero yo no sabía cómo' :(¿Cómo puedo acceder al elemento ASP runat = "server" usando javascript?

siempre que intente manipular un elemento asp usando javascript me sale un 'elemento es nulo' o " documento no está definido", etc ..... error

Javascript funciona bien por lo general, ... pero sólo cuando agrego el runat = 'atributo de servidor' hace el elemento parece invisible a mi javascript.

cualquier sugerencias serían apreciadas

Gracias, Andrew

Respuesta

23

Lo que probablemente está sucediendo es que su elemento/control está dentro de uno o más controles ASP.NET que actúan como nombres de contenedores (página Maestra, ITemplate, Wizard, etc.) y eso está causando que su ID cambie.

Puede usar "ver fuente" en su navegador para confirmar que es lo que está sucediendo en el HTML procesado.

Si su JavaScript está en la página ASPX, la forma más fácil de solucionarlo temporalmente es use the element's ClientID property. Por ejemplo, si usted tenía un control denominado TextBox1 que quería hacer referencia a través de JS:

var textbox = document.getElementById('<%= TextBox1.ClientID %>'); 
+1

gran respuesta ... pero tuvo que darle a la persona que contestó primero ... gracias por la explicación, aunque! – Andrew

+3

@Andrew: si esta es la mejor respuesta, debe aceptarla como tal. En SO la calidad viene antes que la velocidad. –

+0

eso es lo que estaba pensando en realidad ... lo haré. – Andrew

2

Si usted tiene un cuadro de texto:

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

que puede utilizar:

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

Cualquier WebControl expone la misma propiedad ClientID.

2

Haciendo un elemento runat="server" cambia el ID de cliente de ese elemento en base a lo ASP.NET nombrar los contenedores que hay dentro de. Por lo tanto, si usa document.getElementById para manipular el elemento, deberá pasarle la nueva ID generada por .NET. Mira en la propiedad ClientId para obtener la generada ID ... se puede usar en línea en su Javascript, así:

var element = document.getElementById('<%=myControl.ClientID%>'); 
1

Todos sin embargo la pregunta ha sido contestada, pensé que acaba de publicar algunos más información ...

Rick Strahl proporcionó un trabajo bastante interesante alrededor de este problema.

http://www.west-wind.com/WebLog/posts/252178.aspx

Afortunadamente cuando ASP .NET 4.0 llega, le permitirá especificar exacly lo que será el cliente de identificación!

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

+0

+1: para la buena solución de Rick y la nueva característica .NET 4. Resuelve el problema de tener JS en un archivo externo (donde no se puede usar algo como '<% = txtText.ClientID%>') –

Cuestiones relacionadas