ASP.NET C# 中JavaScript无法获取getElementById

3
我知道这是一个非常普遍的问题。我试图通过JavaScript让"回车键"事件触发页面上某个按钮的单击操作。然而,我无论如何都无法从我的ASP.NET页面中按其ID或名称获取任何元素。
据我所知,这个问题与JavaScript的位置以及元素是否已经被加载有关?每次我尝试使用var x = document.getElementById('btn_AddAdmin')时,最终都会得到一个空值。
我的ASP.NET页面有一个继承自SiteMaster页面的页面。我已经包含了一个精简版本的ASP.NET页面和SiteMaster页面。
ASP.NET页面:
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" 
     AutoEventWireup="true" CodeBehind="Admin.aspx.cs" Inherits="HERMES.Admin" %>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<input type="text" id="txt_AddAdmin" runat="server" onkeypress="Populate()" />

主控页面:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" 
         Inherits="HERMES.SiteMaster" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head runat="server">
    <title></title>
    <link href="./Styles/Site.css" rel="stylesheet" type="text/css" />
    <asp:ContentPlaceHolder ID="HeadContent" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>
    <form runat="server">
</form>
</body>

对于格式问题我很抱歉,似乎我做错了什么...

我已经尝试将JavaScript放置在许多不同的位置——从站点主页面到我的asp.net页面的顶部和底部。但无论如何都没有成功。


2
回答你的第一个问题,是的,document.getElementById的位置很重要。你需要在网页浏览器渲染出id为“btn_AddAdmin”的元素后调用它,或者当你知道dom已经准备好时再调用它。从你的问题中并不清楚你在哪里包含了你的javascript。我所能看到的是,在输入框中输入文本时调用了函数“Populate()”,该输入框的id为txt_AddAdmin。我建议你在这里发布你呈现的html页面的源代码。也许使用http://jsfiddle.net/可以使事情变得更容易。 - T. Junghans
我已经尝试根据我的评论中的最后一行将JavaScript代码放置在各个位置,但无论如何都无法正常工作。然而,@Xander已经解决了问题。感谢您的建议! - ImGreg
1个回答

6
var x = document.getElementById('<%= btn_AddAdmin.ClientID %>');

如果您的按钮是服务器控件,它会在输入按钮前缀中添加命名方案,以便在postback期间将其绑定回适当的服务器控件。因此需要使用ClientID属性来检索“渲染的id”。 要了解更多,请访问:

使用必应搜索谷歌:

  • 客户端ID
  • ASP.NET Web Forms客户端编程

哇,那真的奏效了。为什么这种方法有效而另一种方法无效呢? - ImGreg
2
@ImGreg - еңЁжңҚеҠЎеҷЁз«ҜжҺ§д»¶дёҠпјҲеёҰжңүвҖңrunat =вҖқserverвҖңвҖқеұһжҖ§зҡ„жҺ§д»¶пјүдёҠзҡ„idеұһжҖ§иЎЁзӨәжҺ§д»¶зҡ„жңҚеҠЎеҷЁз«ҜIDпјҢеҸҜдҫӣC#д»Јз ҒеҗҺеҸ°дҪҝз”ЁгҖӮеҜ№дәҺиҝҷж ·зҡ„жҺ§д»¶пјҢClientIdеұһжҖ§жҳҜеҸ‘еҮәзҡ„idпјҢе®ғе°ҶеңЁжөҸи§ҲеҷЁдёӯжҳҫзӨәд»ҘдҫӣJavaScriptдҪҝз”ЁгҖӮ - Oded
明白了,这很有道理。不过,我显然需要更深入地阅读一些相关内容,以更好地理解这些东西的工作原理。有没有一些相关阅读链接可以提供?顺便再次感谢。 - ImGreg
按钮,以便在回发期间可以将其绑定回适当的服务器控件。ID不会在回发时发送,而是使用名称属性。虽然名称和ID都以类似但略有不同的方式混淆。 - Matthew
1
@Matthew wiki.asp.net/page.aspx/1082/dopostback-function/ - Alex
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接