【问题标题】:clear all ASP label fields清除所有 ASP 标签字段
【发布时间】:2013-02-04 18:16:15
【问题描述】:

我正在尝试使用 javascript 清除 .aspx 页面中的所有字段(应该是跨浏览器)。以下代码适用于 TextBox 字段,但不适用于 Label 字段。

var elements = document.getElementsByTagName("input");
for (var i = 0; i < elements.length; i++) {
    if (elements[i].type == "text") {
        elements[i].value = "";
    }
    else if (elements[i].type == "label") {
        elements[i].value = "";
    }
}

后来我看到 HTML 将 asp.net 标签渲染为span 所以我也尝试了:

else if (elements[i].type == "span") {
    elements[i].innerHTML = "";
}

仍然没有清除标签。我在这里做错了吗?

另一个问题是,每当我刷新页面时,已清除的 TextBox 字段再次被旧值填充..(真令人沮丧)

我通过引用 this

来尝试上面的代码

请帮忙。

【问题讨论】:

  • span 没有输入值和类型,只是需要清除的innerHtml。如果您看到您通过标签名称“输入”获取所有元素,则跨度为跨度 :) 最好将通用类名称添加到您要清除的标签中,并找到具有该类名称的所有元素
  • 没有办法像使用 TextBox to Labels 一样简单吗?
  • 它们在您的页面中可能有太多的跨度 - 您如何区分它们?只有类名。
  • @Aristos 是的,我现在将班级名称保留为label。现在该怎么做?
  • 是的,我认为这很复杂,而且问题是用示例和尝试编写的,不值得投票

标签: javascript asp.net


【解决方案1】:

在现代浏览器中,这将清除所有 span 元素。

[].slice.call(document.querySelectorAll("span")).forEach(function(e){
    e.innerHTML="";
})

如果您已将“标签”类应用到您的 ASP 标签,那么您可以更具体:

[].slice.call(document.querySelectorAll(".label")).forEach(function(e){
    e.innerHTML="";
})

这是一个适用于旧版浏览器的示例:

var spans = document.getElementsByTagName("span");
for (var i=0; i < spans.length; i++)
{
    if ("label" == spans[i].className)
        spans[i].innerHTML = "";
}

【讨论】:

  • 这在 IE8 中不起作用.. 这是必须的.​​. 我应该先提一下.. 抱歉。顺便说一句,为其他人保留这篇文章:)
  • @Mr_Green 您在使用 jQuery 还是类似的库?
  • @Mr_Green 好的,添加了一个使用旧浏览器的示例。同样,假设“标签”是您添加到 ASP 标签中的一个类。
【解决方案2】:

这是因为没有labelspan 这样的类型。 spanlabel 是完全不同的标签,因此您应该为每个标签使用 getElementsByTagName。下面的代码应该可以为 if 块使用更明确的条件。

var elements = document.getElementsByTagName("input");
for (var i = 0; i < elements.length; i++) {
    if (elements[i].type == "text") {
        elements[i].value = "";
    }
}

elements = document.getElementsByTagName("span");
for (var i = 0; i < elements.length; i++) {
    if (elements[i].className == "aspLabel") {
        elements[i].innerHTML = "";
    }
}

elements = document.getElementsByTagName("label");
for (var i = 0; i < elements.length; i++) {
    if (elements[i].className == "labelClass") {
        elements[i].innerHTML = "";
    }
}

【讨论】:

    【解决方案3】:

    为什么不使用带有runat="server"的html标签或span,那么在不同的浏览器中不同的控件呈现你将不会遇到任何问题

    <label id="lblMyLabel" runat="server"></label>
    

    <span id="spMySpan" runat="server"></span>
    

    然后这段代码应该可以工作

    var elements = document.getElementsByTagName("label");
    for (var i = 0; i < elements.length; i++) {
            elements[i].innerHTML = "";
    }
    

    【讨论】:

    • 我现在了解到,如果 asp:label 具有 associated ID,则它呈现为 &lt;label&gt;,否则如果它没有 associated ID,则呈现为 &lt;span&gt;。所以,我认为没有必要像你提到的那样改变......并使用innerHTML而不是value,因为它们不是输入字段:)。
    【解决方案4】:

    通过引用@Bert Evans 的帖子,我解决了我的问题。问题是我的所有标签字段(包括标题)的类名称为“label”。因此,如果我使用 Bert 的解决方案,它将清除所有标签字段,包括标题(我不想要)。早些时候,我认为我可以通过为要清除的字段分配多个类来解决这个问题。像这样的

    <asp:Label class="label clear" ID="lblBoxId" runat="server" Text="Box Id:"></asp:Label>
    

    然后是伯特的解决方案,

     var spans = document.getElementsByTagName("span");
     for (var i=0; i < spans.length; i++)
     {
         if ("clear" == spans[i].className)  //replacing 'label' with 'clear'
            spans[i].innerHTML = "";
     }
    

    这并不能解决问题。但是当我使用这两个类的组合时,问题就解决了:)。

      if ("label clear" == spans[i].className)  //using combination of classes as condition
    

    这可能很简单,但我真的浪费了我宝贵的时间来理解它。所以我分享了:)

    编辑:也可以使用简单的indexOf()解决

    if (spans[i].className.indexOf("clear") != -1)   //not tested
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-04
      • 2011-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      相关资源
      最近更新 更多