如何在javascript中将文本分配给标签?

Posted

技术标签:

【中文标题】如何在javascript中将文本分配给标签?【英文标题】:How to assign a text to label in javascript? 【发布时间】:2014-02-10 12:57:52 【问题描述】:

我正在使用 RegularExpressionValidator 来验证文本框。

现在如果文本框有效,我需要在标签控件上显示“页面有效”消息。

我是在后面的代码中执行此操作,还是在 javascript 本身中声明标签?

在javascript中我尝试过使用:

document.getElementById("LabelId").innerText="Your Text Here"

但它显示 Microsoft JScript 运行时错误

无法设置属性“innerText”的值:对象为空或 未定义”。

我也尝试过使用innerhtml,但它显示了类似的错误。那么为标签赋值的正确方法是什么? 编辑:下面是我的aspx编码:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true"        
CodeBehind="RegularExpressionValidator.aspx.cs" Inherits="ValidationTask.WebForm3" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<asp:Label ID="LabelText" runat="server" Text="Label"></asp:Label><br />
<script type="text/javascript" language="javascript">
   function ValidatePage() 
       debugger;
       if (Page_IsValid) 
           document.getElementById('<%= LabelText.ClientID %>').innerHTML = 'Page Is Valid';
       
       else 
           document.getElementById('<%= LabelText.ClientID %>').innerHTML = 'Page is Invalid';
       
    
</script>  
<asp:Label ID="LabelZip" runat="server" Text="Enter Zip Code"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
<asp:Button ID="Button1" runat="server" Text="Enter" OnClientClick="return ValidatePage()"  />

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" ControlToValidate="TextBox1" 
ValidationExpression="\d5" runat="server" ErrorMessage="The zip code must be 5 numeric   
digits"></asp:RegularExpressionValidator>
</asp:Content>

提前致谢。

P.S.我是新来的,这是我的第一个问题。如有错误请忽略。

【问题讨论】:

尝试在文档加载或准备就绪时添加代码。当在 dom 中找不到元素时,会发生 Object undefined 或 null。参考***.com/questions/4488714/… 尝试使用标签的客户端 ID.... 像 "&lt;%=LabelId.clientID%&gt;" 或使用检查元素 你能检查元素并确保你有正确的 id 吗? 你在使用母版页吗?? @HarshadaChavan 谢谢。我已经引用了您发布的链接,并且已经实现了相同的链接。没有任何错误,但是标签的值没有显示出来。 【参考方案1】:
document.getElementById("LabelId").innerText="Your Text Here"

听起来您的元素在页面上找不到。仔细检查 ID 以确保它存在。最简单的方法是只查看 html 以确保您使用的是正确的 ID。将 asp.Net 标签定义为服务器端控件时要记住的一件事是,客户端 ID 是指定 ID 和标签祖先的 ID 的串联。这意味着您不能直接在 JavaScript 中引用服务器端 ID,因为它只是完整客户端 ID 的一部分。您可能必须使用通配符指定它。

如果您需要使用通配符,在 Jquery 中可能会更容易

$('[id*=LabelId]')

这意味着您必须添加对 JQuery 的脚本引用。

【讨论】:

感谢先生的快速回复。我已经尝试过了,但是显示了这个错误。“Microsoft JScript 运行时错误:属性 '$' 的值为 null 或未定义,不是函数对象” 他确实说过“这意味着您必须添加对 JQuery 的脚本引用”,听起来您还没有这样做 是的,抱歉,我没有指定您需要为该解决方案添加 Jquery。但是,我会确保元素首先按该 ID 在页面上。如果添加服务器端 asp.net 标签,则客户端 id 将是指定 id 及其祖先的 id 的串联。先检查一下【参考方案2】:

客户端 ID 的生成

在浏览器中查看页面的源代码。这将为您提供有关如何生成客户端 ID 的良好指示。每个元素 ID 应该是唯一的,并且使用母版页和控件,您和 .NET 框架将很难产生这样的结果。如果您使用带有内容占位符的母版页,您会注意到您的元素 ID 是根据它们所在的内容占位符的名称生成的。

这是一个很好的Code Project article,关于客户端 ID 的生成。

验证

在您的情况下,使用RegularExpressionValidator 将在按下按钮时触发页面验证器如果有效导致页面被回发到服务器。最好在后面的代码中添加代码。在这种情况下,@SachinScriptManager.RegisterStartupScript 之类的东西应该在按钮的事件处理程序中工作。

假设您只有一个字段:您可以将验证器转换为 CustomFieldValidator 并通过 javascript 触发正则表达式。如果值正确,您可以在 javascript 中设置标签文本,而无需进行任何回发,但是一旦页面回发,您可能会丢失标签的状态。

编辑: jQuery

我经常使用jQuery selectors 引用我的元素,因为我不想为生成的客户端 ID 烦恼。您可以使用Ends With Selector 获取您的元素,如下所示:

var name = $('input[id$="txtName"]'); // Find an element that ends with "txtName".

请记住,当您在生成的页面上的多个位置有一个以相同名称结尾的元素时,可能会发生冲突。

【讨论】:

【参考方案3】:

在 ASP.Net Web 表单中,服务器上的每个控件都有一个名为 ClientID 的属性。这是您可以在客户端使用的生成的 ID。因此,要在客户端为带有 的标签设置标签,您可以做的一种方法是使用服务器端 RegisterStartupScript 在客户端变量中获取 clientId -

//server side code
page_load()
 ScriptManager.RegisterStartupScript("IDs", string.format("var labelId = '0';", label1.ClientID);


//in javascript
document.getElementById(labelId).innerHTML = 'whatever';

顺便说一句,我刚刚看过这段代码,所以它可能无法按原样运行。

【讨论】:

以上是关于如何在javascript中将文本分配给标签?的主要内容,如果未能解决你的问题,请参考以下文章

如何将函数分配给 Javascript 对象的属性?

在 Python Bagging Classifier 中将最佳网格搜索超参数分配给最终模型

如何在不使用outerHTML的情况下在javascript中将标签作为文本? [复制]

将文本分配给UILabel(iOS,Swift 4,Xcode 9)时内存泄漏

将JavaScript函数分配给变量的效果[重复]

在 JavaScript 中,将类名分配给常规元素和命名空间元素是不是不同?