我使用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>
答案 0 :(得分:25)
此:
function ConfirmTransfere() {
if (confirm("Syatem not allow negative inventory, would you like to continue ?") == true) {
document.getElementById("btnAlelrt").click();
}
需要这样:
function ConfirmTransfere() {
if (confirm("Syatem not allow negative inventory, would you like to continue ?") == true) {
document.getElementById('<%=btnAlert.ClientID%>').click();
}
问题是你的按钮是一个ASP.Net控件,它将生成它自己的客户端ID,这将与你指定的ID不同。输入代码<%=btnAlert.ClientID%>
将生成的代码发布到浏览器。
答案 1 :(得分:6)
您可以使用:
document.getElementById('<%= btnAlelrt.ClientID %>').click()
从ASP.NET 4.0开始,您可以为您的元素使用ClientIDMode属性。如果您将其设置为Static
,则ClientID
值将设置为ID属性的值:
<asp:Label ID="Label1" runat="server" ClientIDMode="Static" />
将呈现如下:
<span id="Label1" name="ctl00$MasterPageBody$ctl00$Label1" />
答案 2 :(得分:3)
您为asp提供的ID:按钮是ASP.Net在服务器上使用的ID。它不是客户端脚本使用的ID。
您应该使用:
document.getElementById("<%= btnAlelrt.ClientID %>").click();
答案 3 :(得分:3)
如果您在生成的页面上查看来源,您可能会发现该按钮不再具有ID“btnAlelrt”。它可能包含“ctl001_btnAlert”或其他一些生成的唯一性标识符。
这就是为什么你的javascript找不到它。
您需要按标签搜索,并检查ID以查看它们是否以btnAlelrt结尾,或者您必须使用不会更改的ID放置DIV或SPAN(即不没有runat =“server”)。然后,您可以通过其ID找到该元素,然后获取其中的按钮。
如果可以,您可以使用&lt;%= btnAlelrt.ClientID%&gt;语法在您的javascript中插入正确的ID。
(SIDENOTE:这应该是btnAlert?)
答案 4 :(得分:1)
如果查看渲染页面,名为btnAlelrt的控件将不再具有该名称...
如果添加“&lt;%=”,则可以访问控件的C#名称,它应该可以正常工作。
答案 5 :(得分:1)
我目前找不到要为您发布的代码示例,但我可以解释您遇到的问题。
ASP.NET在将对象/元素/按钮写入页面时不使用您提供的ID,而是为对象提供客户端ID。
如果您在代码中执行Msgbox(btnAlelrt.clientID),那么您将看到javascript应该使用的对象名称。
最好让.NET代码在javascript中将这些值写入页面,因为它们不是常量。
希望这有帮助。
詹姆斯
答案 6 :(得分:1)
尝试使用ClientIDMode =&#34;静态&#34;。这将不会在运行时更改按钮ID。
<asp:Button ID="SendMessageButton" ClientIDMode="Static" runat="server" Text="Send Message" CssClass="buttonPositive"
CausesValidation="True" OnClientClick="validate();" OnClick="SendMessageButton_Click" />
然后你可以使用下面的jquery来访问你的按钮。我希望这有帮助。
var element = document.getElementById('SendMessageButton');