ASP.NET 控件的 JavaScript getElementById 返回 null?
我使用 JavaScript,在执行过程中出现此错误:
Microsoft JScript runtime error: 'document.getElementById(...)' is null or not an object
这是我的代码:
<asp:Content ID="content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<script language="javascript" type="text/javascript">
function ConfirmTransfere() {
if (confirm("Syatem not allow negative inventory, would you like to continue ?") == true) {
document.getElementById("btnAlelrt").click();
}
}
</script>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="uxContainer" runat="server">
<ContentTemplate>
<table>
<tr>
<td>
<asp:Button ID="uxTransfer" runat="server" Text="Transfer" OnClick="uxTransfer_Click" />
<asp:Button ID="btnAlelrt" runat="server" Text="GetDetails" OnClick="btnAlelrt_Click" />
</td>
</tr>
</table>
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="uxTransfer" />
</Triggers>
</asp:UpdatePanel>
</asp:Content>
I use JavaScript and this error appears for me during execution:
Microsoft JScript runtime error: 'document.getElementById(...)' is null or not an object
this my code:
<asp:Content ID="content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<script language="javascript" type="text/javascript">
function ConfirmTransfere() {
if (confirm("Syatem not allow negative inventory, would you like to continue ?") == true) {
document.getElementById("btnAlelrt").click();
}
}
</script>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="uxContainer" runat="server">
<ContentTemplate>
<table>
<tr>
<td>
<asp:Button ID="uxTransfer" runat="server" Text="Transfer" OnClick="uxTransfer_Click" />
<asp:Button ID="btnAlelrt" runat="server" Text="GetDetails" OnClick="btnAlelrt_Click" />
</td>
</tr>
</table>
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="uxTransfer" />
</Triggers>
</asp:UpdatePanel>
</asp:Content>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
这:
需要是这样:
问题是您的按钮是 ASP.Net 控件,并将生成它自己的客户端 ID,该 ID 与您指定的 ID 不同。 输入代码
<%=btnAlert.ClientID%>
将生成的代码发布到浏览器。This:
needs to be this:
The problem is that your button is an ASP.Net control and will generate it's own client id, which will be different from the ID you specified. putting in the code
<%=btnAlert.ClientID%>
Will post the generated one out to the browser.您可以使用它:
从 ASP.NET 4.0 开始,您可以使用 ClientIDMode 元素的属性。 如果将其设置为
Static
,则ClientID
值将设置为 ID 属性的值:将呈现如下所示:
You can use this:
Starting from ASP.NET 4.0 you can use ClientIDMode property for you element. And if you set it into
Static
then theClientID
value will be set to the value of the ID property:will be rendered as something like this:
您为 asp:Button 提供的 ID 是 ASP.Net 在服务器上使用的 ID。 它不是客户端脚本使用的 ID。
你应该使用:
The ID you give the asp:Button is the ID that is used on the server by ASP.Net. It is not the ID that is used by the client script.
You should use:
如果您在生成的页面上查看源代码,您可能会发现该按钮不再具有 ID“btnAlelrt”。 它可能有类似“ctl001_btnAlert”的内容,或其他一些生成的唯一性标识符。
这就是为什么你的 javascript 找不到它。
您要么需要按标签搜索,并检查 ID 以查看它们是否以 btnAlelrt 结尾,要么您必须在其周围放置一个 DIV 或 SPAN,并使用不会更改的 ID(即没有运行=“服务器”)。 然后,您可以通过其 ID 找到该元素,然后获取其中的按钮。
如果可以的话,您可以使用<%=btnAlelrt.ClientID%> 在 JavaScript 中插入正确 ID 的语法。
(旁注:这应该是 btnAlert 吗?)
If you view source on your generated page you will likely find that the button no longer has the ID "btnAlelrt". It might have something like "ctl001_btnAlert", or some other generated uniqueness identifier.
This is why your javascript isn't finding it.
You'll either need to search by tag, and check the IDs to see if they end in btnAlelrt, or you'll have to place a DIV or SPAN around it with an ID that won't be changed (i.e. doesn't have runat="server"). You can then find that element by its ID, and then get the button inside of it.
If you can, you can use the <%=btnAlelrt.ClientID%> syntax to insert the proper ID in your javascript.
(SIDENOTE:was this supposed to be btnAlert?)
我目前找不到可以为您发布的代码示例,但我可以解释您遇到的问题。
ASP.NET 在将对象/元素/按钮写入页面时不使用您为其提供的 ID,而是为该对象提供客户端 ID。
如果您在代码中执行 Msgbox(btnAlelrt.clientID) 那么您将看到您的 javascript 应使用的对象名称。
最好让 .NET 代码在 javascript 中将这些值写入页面,因为它们不是常量。
希望这可以帮助。
詹姆士
I can't find a code sample to post for you at this moment, but I can explain the problem your having.
ASP.NET doesn't use the ID you give an object /element / button when it writes it to the page, instead it give the object a client ID.
If you do Msgbox(btnAlelrt.clientID) in your code then you will see the object name your javascript should use.
It is better to have the .NET code write out these values, in javascript, to the page, as they are not a constant.
Hope this helps.
James
如果您查看呈现的页面,名为 btnAlelrt 的控件不再具有该名称...
如果添加“<%=”,您就可以访问控件的 C# 名称,并且它应该可以工作。
If you look at the rendered page the control called btnAlelrt no longer has that name...
If you add "<%=" you are then able to access the C# name of a control, and it should work.
尝试使用 ClientIDMode="Static"。 这不会在运行时更改按钮 ID。
然后你可以使用下面的 jquery 来访问你的按钮。 我希望这有帮助。
try using ClientIDMode="Static". this will dont change button id at runtime.
Then you can use below jquery to access your button. I hope this helps.