如何使用javascript访问runat =“server”ASP元素?

时间:2009-03-23 20:19:47

标签: asp.net javascript runatserver

似乎每个人都这样做(在代码帖等等)......但我不知道如何:(

每当我尝试使用javascript操作asp元素时,我得到“元素为空”或“文档未定义”等错误.....

javascript通常工作得很好,但只有当我添加runat =“server”属性时,该元素才会对我的javascript不可见。

任何建议都将不胜感激

谢谢,安德鲁

4 个答案:

答案 0 :(得分:26)

可能发生的事情是您的元素/控件位于一个或多个ASP.NET控件中,这些控件充当命名容器(母版页,ITemplate,向导等),并且导致其ID发生更改。

您可以在浏览器中使用“查看源代码”来确认呈现的HTML中发生了什么。

如果您的JavaScript位于ASPX页面中,暂时解决此问题的最简单方法是use the element's ClientID property。例如,如果您有一个名为TextBox1的控件,您想通过JS引用它:

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

答案 1 :(得分:3)

使元素runat="server"根据其内部的ASP.NET命名容器更改该元素的客户端ID。因此,如果您使用document.getElementById来操作元素,则需要将其传递给.NET生成的新ID。查看ClientId属性以获取生成的ID ...您可以在Javascript中使用内联,如下所示:

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

答案 2 :(得分:2)

如果您有文本框:

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

你可以使用:

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

任何WebControl都会公开相同的ClientID属性。

答案 3 :(得分:1)

虽然这个问题已经得到解答,但我想我会发布更多信息......

Rick Strahl为这个问题提供了一个非常有趣的工作。

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

值得庆幸的是,当ASP .NET 4.0到货时,它将允许您直接指定客户端ID的内容!

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