为什么我可以在javascript中访问asp:TextBox,而不是asp:Label?

时间:2012-04-10 19:00:35

标签: javascript asp.net

以下是我正在谈论的内容的简单演示

头标记中的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个节点。我想你不能像我一样通过表单对象访问它们。

2 个答案:

答案 0 :(得分:3)

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问题。

答案 1 :(得分:2)

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

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