似乎每个人都这样做(在代码帖等等)......但我不知道如何:(
每当我尝试使用javascript操作asp元素时,我得到“元素为空”或“文档未定义”等错误.....
javascript通常工作得很好,但只有当我添加runat =“server”属性时,该元素才会对我的javascript不可见。
任何建议都将不胜感激
谢谢,安德鲁
答案 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