通过JavaScript获取ASP.NET标签控件的方法是否正确?

通过JavaScript获取ASP.NET标签控件的方法是否正确?,javascript,asp.net,Javascript,Asp.net,你好。我正在尝试使用javascript获取asp.net标签控件的文本值。但是,当我使用 var a = document.getElementById('<%= lblTreatyNo.ClientID %>').innerText; 我在网站设计中使用母版页。我想知道取这个的正确方法。有没有办法不使用源文件的全名 更新这里是我的代码示例 <asp:Label ID="lblTreatyNo" runat="server"></asp:Label>

你好。我正在尝试使用javascript获取asp.net标签控件的文本值。但是,当我使用

var a = document.getElementById('<%= lblTreatyNo.ClientID %>').innerText;
我在网站设计中使用母版页。我想知道取这个的正确方法。有没有办法不使用源文件的全名

更新这里是我的代码示例

<asp:Label ID="lblTreatyNo" runat="server"></asp:Label>    
<asp:Button ID="btnNewSec" runat="server" OnClientClick="javascript:void(window.open ('ft_newsec.aspx?ftid='+document.getElementById('ctl00_ContentPlaceHolder1_lblTreatyNo').innerHTML+'',null,'height=220,width=300,resizable=yes,status=no,toolbar=no,menubar=no,location=no,scrollbars=yes')); return false;" Text="Add New Company" CausesValidation="False" Width="155px" />

您可以删除asp短标记:

发件人:


我能看到的唯一问题是,您试图在加载DOM之前获取元素。实际情况是,如果在JavaScript代码之后定义了
asp:Label
;执行JavaScript代码时,您试图获取的元素未知,并且
document.getElementById
将返回
null
。但是,在这种情况下,第二种方法也不应该起作用。我们需要更多地了解上下文以帮助您,即定义了
asp:Label
和JavaScript代码的代码;看起来可能是别的什么地方出了问题

关于最后的问题,使用
ClientID
属性是正确的方法,因为
ClientID
将是元素的
id
属性(HTML)的值

更新,关于Popo新发布的代码
OnClientClick
属性(在ASPX源代码中)中的
lblTreatyNo.ClientID
未呈现;如果查看呈现页面的源代码,您将看到如下内容:

onclick="&lt;%= lblTreatyNo.ClientID %>
在ASPX页面中定义时,不应将服务器端代码放入
OnClientClick
,因为不会呈现属性值。您可以想象,一旦呈现页面,
OnClientClick
将被JavaScript事件处理程序
onclick
直接替换,而不呈现
OnClientClick
的值

要避免此问题,您可以在代码隐藏中设置
OnClientClick
属性:

protected void Page_Load(object sender, EventArgs e)
{
    btnNewSec.OnClientClick="javascript:void(window.open ('ft_newsec.aspx?ftid='+document.getElementById('"+lblTreatyNo.ClientID+"').innerHTML+'',null,'height=220,width=300,resizable=yes,status=no,toolbar=no,menubar=no,location=no,scrollbars=yes')); 

    return false;
}
或者,如果希望在客户端执行此操作,可以使用jQuery执行以下操作:

$(function() {
    $("#<%= btnNewSec.ClientID %>").click(function(e) {
        window.open('ft_newsec.aspx?ftid=' + document.getElementById('<%= lblTreatyNo.ClientID %>').innerHTML + '', null, 'height=220,width=300,resizable=yes,status=no,toolbar=no,menubar=no,location=no,scrollbars=yes');
        e.preventDefault();
    });
});
$(函数(){
$(“#”)点击(函数(e){
window.open('ft_newsec.aspx?ftid='+document.getElementById('').innerHTML+'',null,'height=220,width=300,resizeable=yes,status=no,toolbar=no,menubar=no,location=no,scrollbars=yes');
e、 预防默认值();
});
});

加载DOM后,上面定义的jQuery代码将把JavaScript代码附加到按钮的
单击事件中;一旦用户点击按钮,您的JavaScript代码将被执行。

下面是一个示例场景。
假设您在母版页的内容页中有一个标签和一个按钮。
单击按钮时,您希望标签文本位于客户端

<div>
    <asp:Label ID="myLabel" runat="server" Text="Hello World"></asp:Label><br />
    <asp:Button ID="myButton" runat="server" Text="Click Me"/>
</div>
这样,呈现的ClientID就会传递给您的函数。
现在使用javascript访问它

function ChangeLabelText(label_id) {
    alert(document.getElementById(label_id));
    //prevents postback, return true if you need postback
    return false;
}

快乐编码

您正在运行的ASP.NET版本是什么?如果它是4.0,那么使用may help

我看不出你的第二个代码示例是否正确,你是否在意外事件中使用了生成的客户端id?@Popo感谢你发布了更多的代码。我现在更新了我的答案,并为您的问题添加了解决方法。希望它解决了使用生成的ID而不是原始ID的问题-这很糟糕idea@abatishchev该死,我忘了用lblTreatyNo.ClientID替换它了;这不是故意的。我已经更正了代码。谢谢你的提示。也许不再需要否决票了。谢谢你。我以前不知道没有呈现服务器端属性值。你的帖子对我来说非常有用=)我可以在ClientClickEvent(openWindow();)中调用函数吗。也许那样也行。竖起大拇指寻求帮助@波波,不客气;我很高兴这对你有帮助。当然可以;下面的代码正是您想要的:您只需定义一个JavaScript函数
openWindow
,并从
OnClientClick
中引用(或调用):
OnClientClick=“JavaScript:openWindow();return false;”
$(function() {
    $("#<%= btnNewSec.ClientID %>").click(function(e) {
        window.open('ft_newsec.aspx?ftid=' + document.getElementById('<%= lblTreatyNo.ClientID %>').innerHTML + '', null, 'height=220,width=300,resizable=yes,status=no,toolbar=no,menubar=no,location=no,scrollbars=yes');
        e.preventDefault();
    });
});
<div>
    <asp:Label ID="myLabel" runat="server" Text="Hello World"></asp:Label><br />
    <asp:Button ID="myButton" runat="server" Text="Click Me"/>
</div>
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        myButton.Attributes.Add("onclick", "javascript:return ChangeLabelText('"
            + myLabel.ClientID + "');");
    }
}
function ChangeLabelText(label_id) {
    alert(document.getElementById(label_id));
    //prevents postback, return true if you need postback
    return false;
}