Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript getElementById找不到由ASP.net生成的控件_Javascript_Asp.net_Getelementbyid - Fatal编程技术网

Javascript getElementById找不到由ASP.net生成的控件

Javascript getElementById找不到由ASP.net生成的控件,javascript,asp.net,getelementbyid,Javascript,Asp.net,Getelementbyid,我只是试图在javascript中的变量中存储一个标签,但由于某些原因,这不适用于document.getElementById('control')。我知道我的javascript可以很好地链接到我的html文件,因为其他一切都可以正常工作 以下是我的javascript代码: function performEvapCooledCircuit(txt) { var error = document.getElementById('lblError'); if (txt.v

我只是试图在javascript中的变量中存储一个标签,但由于某些原因,这不适用于
document.getElementById('control')。我知道我的javascript可以很好地链接到我的html文件,因为其他一切都可以正常工作

以下是我的javascript代码:

function performEvapCooledCircuit(txt)
{
    var error = document.getElementById('lblError');


    if (txt.value == null || isNaN(txt.value))
    {
       error.style.visibility = "visible";
    }
}
以下是我的标签的html代码:

<asp:Label ID="lblError" class="NormLabel" runat="server" 
   style="color:red; visibility:hidden;" Text="Invalid Input."></asp:Label>


我收到一个错误,表示预期对象???

ASP.NET将生成的ID将不是“lblError”,因此您需要通过其
客户端ID来引用它

document.getElementById('<%=lblError.ClientID %>');

标签的ID不是“lblError”。ASP.net引擎更改了ID。请检查浏览器中的HTML源代码以找出真正的ID。

这不是标签的HTML,它是一个ASP.net控件,在响应中发送之前将呈现为HTML。ASP.NET WebForms控件有时会更改它们创建的HTML的id

查看网页源代码,查看呈现页面上HTML元素的id。

“hunter”提供了一种非常可靠的方法,但是,在我看来,更好的方法是在控件上使用“CliendIDMode”属性,并将该属性设置为“Static”。这将使客户端和服务器ID相同。像这样:

<asp:TextBox ID="ServerAndClientId" runat="server" ClientIDMode="Static" />

您可以使用以下功能:

document.getElementById('<%= lblError.ClientID %>').click()
将呈现如下内容:

<span id="lblError" name="ctl00$MasterPageBody$ctl00$Label1" />


连同ŠimeVidas的解释,这个答案可能会有帮助。@hunter OP说“javascript正在链接到他的html文件”+1用于提及ASP更改ID,但@ŠimeVidas是正确的。他们提到JS在文件之外。或者,他们可以添加
var lblErrorID=''并在其他外部脚本中引用它(如果在页面加载后调用该脚本)。(
var error=document.getElementByID(lblErrorID);
)谢谢大家!你帮了大忙@ŠimeVidas:我不建议对ID值进行硬编码,因为这可能会根据容器位置而改变。如果一个页面是适度静态的,这是可以的,但在将来的任何添加/重新设计中,这可能是一个问题。@Brad是的,硬编码将是一个坏主意。我不做ASP.net,但我记得有这个问题,我读到一个功能,可以让你直接定义ClientID。这就是这个问题的解决办法。哇,谢谢。但是波斯特说,使用这种方法有一些缺点。是的,根据控制的类型,它并不总是理想的。总的来说,我还是喜欢它。特别是如果您的所有javascript都在外部文件中(比如一个好男孩或女孩)。
document.getElementById('<%= lblError.ClientID %>').click()
 <asp:Label ID="lblError" runat="server" ClientIDMode="Static" />
<span id="lblError" name="ctl00$MasterPageBody$ctl00$Label1" />