如何使用JavaScript访问具有runat="server"属性的ASP元素?

10
似乎每个人都在做这个(在代码贴子等中)……但我不知道怎么做。:(
每当我尝试使用JavaScript操作asp元素时,我会收到"element is null"或"document is undefined"等错误提示。
通常情况下,JavaScript工作得很好,但只有当我添加runat="server"属性时,该元素才对我的JavaScript不可见。
欢迎提出任何建议。
谢谢,Andrew
4个回答

28

可能发生的情况是您的元素/控件位于一个或多个作为命名容器的ASP.NET控件中(Master页面、ITemplate、Wizard等),这可能会导致其ID更改。

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

如果您的JavaScript位于ASPX页面中,则最简单的临时解决方法是使用元素的ClientID属性。例如,如果您有一个名为TextBox1的控件,希望通过JS引用它:

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

1
很棒的回答...但不得不把它给第一个回答的人...虽然感谢你的解释! - Andrew
3
@Andrew - 如果这是更好的答案,你应该将其接受为这样。在SO上质量优先于速度。 - Gavin Miller
是的,其实我也是这么想的...会去做的。 - Andrew

3
让元素添加runat="server"属性后,该元素的客户端ID将根据其所在的ASP.NET命名容器而更改。因此,如果您使用document.getElementById来操作该元素,则需要将由.NET生成的新ID传递给它。请查看ClientId属性以获取生成的ID...您可以像这样在JavaScript中内联使用它:
var element = document.getElementById('<%=myControl.ClientID%>');

2
如果你有一个文本框:
<asp:TextBox id="txtText" runat="server" />

您可以使用以下方法:

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

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


1

+1:对于Rick的好解决方案和.NET 4的新功能表示赞赏。它解决了在外部文件中使用JS时(无法使用诸如<%=txtText.ClientID %>之类的内容)的问题。 - Pavel Hodek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接