通过JavaScript获取ASP.NET标签控件的方法是否正确?
你好。我正在尝试使用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>
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="<%= 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;
}