ASP.NET 控件的 JavaScript getElementById 返回 null?

发布于 2024-07-26 15:49:54 字数 1247 浏览 9 评论 0原文

我使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

像你 2024-08-02 15:49:54

这:

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 与您指定的 ID 不同。 输入代码 <%=btnAlert.ClientID%> 将生成的代码发布到浏览器。

This:

function ConfirmTransfere() {
        if (confirm("Syatem not allow negative inventory, would you like to continue ?") == true) {
            document.getElementById("btnAlelrt").click();

        }       

needs to be this:

function ConfirmTransfere() {
        if (confirm("Syatem not allow negative inventory, would you like to continue ?") == true) {
            document.getElementById('<%=btnAlert.ClientID%>').click();

        }     

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.

诗酒趁年少 2024-08-02 15:49:54

您可以使用它:

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" />

You can use this:

document.getElementById('<%= btnAlelrt.ClientID %>').click()

Starting from ASP.NET 4.0 you can use ClientIDMode property for you element. And if you set it into Static then the ClientID value will be set to the value of the ID property:

<asp:Label ID="Label1" runat="server" ClientIDMode="Static" />

will be rendered as something like this:

<span id="Label1" name="ctl00$MasterPageBody$ctl00$Label1" />
眼眸里的快感 2024-08-02 15:49:54

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

你应该使用:

document.getElementById("<%= btnAlelrt.ClientID %>").click();

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:

document.getElementById("<%= btnAlelrt.ClientID %>").click();
溺深海 2024-08-02 15:49:54

如果您在生成的页面上查看源代码,您可能会发现该按钮不再具有 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?)

离不开的别离 2024-08-02 15:49:54

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

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

春风十里 2024-08-02 15:49:54

如果您查看呈现的页面,名为 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.

七秒鱼° 2024-08-02 15:49:54

尝试使用 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');

try using ClientIDMode="Static". this will dont change button id at runtime.

  <asp:Button ID="SendMessageButton" ClientIDMode="Static" runat="server" Text="Send Message" CssClass="buttonPositive"
            CausesValidation="True" OnClientClick="validate();" OnClick="SendMessageButton_Click" />

Then you can use below jquery to access your button. I hope this helps.

 var element = document.getElementById('SendMessageButton');
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文