ASP.NET Control的JavaScript getElementById返回null?

时间:2009-07-13 11:50:39

标签: asp.net javascript getelementbyid

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

7 个答案:

答案 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');