12

我使用 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>
4

7 回答 7

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%>生成的代码发布到浏览器。

于 2009-07-13T11:53:09.613 回答
7

你可以使用这个:

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" />
于 2013-01-18T14:22:13.087 回答
3

您为 asp:Button 提供的 ID 是 ASP.Net 在服务器上使用的 ID。它不是客户端脚本使用的 ID。

你应该使用:

document.getElementById("<%= btnAlelrt.ClientID %>").click();
于 2009-07-13T11:54:08.127 回答
3

如果您在生成的页面上查看源代码,您可能会发现该按钮不再具有 ID“btnAlelrt”。它可能有“ctl001_btnAlert”之类的东西,或其他一些生成的唯一性标识符。

这就是为什么您的 javascript 没有找到它的原因。

您要么需要按标签搜索,并检查 ID 以查看它们是否以 btnAlelrt 结尾,要么您必须在其周围放置一个 DIV 或 SPAN,并使用不会更改的 ID(即没有运行=“服务器”)。然后,您可以通过其 ID 找到该元素,然后获取其中的按钮。

如果可以,您可以使用 <%=btnAlelrt.ClientID%> 语法在您的 javascript 中插入正确的 ID。

(旁注:这应该是 btnAlert 吗?)

于 2009-07-13T11:56:12.430 回答
1

如果您查看呈现的页面,名为 btnAlelrt 的控件不再具有该名称...

如果添加“<%=”,您就可以访问控件的 C# 名称,并且它应该可以工作。

于 2009-07-13T11:53:19.907 回答
1

目前我找不到可以为您发布的代码示例,但我可以解释您遇到的问题。

ASP.NET 在将对象/元素/按钮写入页面时不使用您提供的 ID,而是为对象提供客户端 ID。

如果您在代码中执行 Msgbox(btnAlelrt.clientID),那么您将看到您的 javascript 应该使用的对象名称。

最好让 .NET 代码在 javascript 中将这些值写入页面,因为它们不是常量。

希望这可以帮助。

詹姆士

于 2009-07-13T11:59:51.407 回答
1

尝试使用 ClientIDMode="Static"。这不会在运行时更改按钮 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');
于 2017-06-29T02:50:19.060 回答