为什么我可以在javascript中访问asp:TextBox,但不能访问asp:Label

Why can I access asp:TextBox in javascript, but not asp:Label?

本文关键字:asp 访问 但不能 Label TextBox 我可以 为什么 javascript      更新时间:2023-09-26

这是我在说什么的简单演示

头标签中的JS:

  function changeTxt(frm){
    var lblo = frm.txt1;
    lblo.value = "hey guy";
    var lbl = frm.lblStatus;
    lbl.innerHTML = "hello world";
  }

ASPX/HTML 标记:

<asp:Label ID="lblStatus" runat="server"></asp:Label>
<asp:TextBox ID="txt1" runat="server"></asp:TextBox>
<button onclick="changeTxt(this.form);">go</button>

js 查找txt1input html 元素)并更改值。但是为什么它找不到lblStatusspan html元素)?它以undefined出现.它们都是相同的形式。

编辑:问题似乎是访问js中的span节点。我想你不能像我一样通过表单对象访问它们。

asp:Label呈现为范围或标签,因此value不是更改文本的正确方法。您需要使用类似innerHTML这样的东西:

function changeTxt(frm){
    var lblo = document.getElementById('<%: txt1.ClientID %>');
    lblo.value = "hey guy";
    var lbl = document.getElementById('<%: lblStatus.ClientID %>');
    lbl.innerHTML = "hello world";
}

您还应该使用 getElementById 来获取对象。

使用innerHTML时注意潜在的 XSS 问题。

ASP:Label 不呈现表单元素。它呈现spanlabel。您必须使用 innerHTML 访问该值。请确保使用 ClientID,因为如果标签控件不直接位于页面中或使用母版页,则 ASP.NET 运行时可能会呈现不同的 ID。

var lbl = document.getElementById("<%= lblStatus.ClientID %>");
lbl.innerHTML = "hello world";