9

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

每当我尝试使用 JavaScript 操作一个 asp 元素时,我都会收到一个"element is null"或其他"document is undefined"错误.....

JavaScript 通常可以正常工作,...但只有当我添加runat="server"属性时,该元素才会对我的 JavaScript 看起来不可见。

任何建议,将不胜感激。

谢谢,安德鲁

4

4 回答 4

27

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

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

如果您的 JavaScript 在 ASPX 页面中,临时解决此问题的最简单方法是使用元素的 ClientID 属性。例如,如果您想通过 JS 引用一个名为 TextBox1 的控件:

var textbox = document.getElementById('<%= TextBox1.ClientID %>');
于 2009-03-23T20:24:20.337 回答
3

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

var element = document.getElementById('<%=myControl.ClientID%>');
于 2009-03-23T20:24:55.687 回答
2

如果你有一个文本框:

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

您可以使用:

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

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

于 2009-03-23T20:23:35.393 回答
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

于 2009-03-23T22:37:04.043 回答