2

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 = "";
}

それでもラベルはクリアされていません。ここで何か間違ったことをしていますか?

もう1つの問題は、ページを更新するたびに、クリアされたTextBoxフィールドに古い値が再び入力されることです..(本当にイライラします)

これを参照して上記のコードを試しています

助けてください。

4

4 に答える 4

3

labelやなどの型がないからspanです。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 = "";
    }
}
于 2012-12-22T12:53:29.453 に答える
3

最新のブラウザーでは、これによりすべてのスパン要素がクリアされます。

[].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 = "";
}
于 2012-12-22T12:32:46.163 に答える
0

@Bert Evans の投稿を参照することで、私は問題を解決しました。問題は、見出しを含むすべてのラベル フィールドのクラス名が「label」であることでした。したがって、バートのソリューションを使用すると、見出しを含むすべてのラベル フィールドがクリアされます (これは望ましくありません)。以前は、クリアしたいフィールドに複数のクラスを割り当てることでこれを解決できると思っていました。このようなもの

<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

これは単純かもしれませんが、理解するのに貴重な時間を本当に無駄にしました。だから私は共有しました:)

EDIT:シンプルな方法でも解決できますindexOf()

if (spans[i].className.indexOf("clear") != -1)   //not tested
于 2012-12-22T13:29:47.840 に答える
0

runat="server" で html ラベルまたはスパンを使用しないのはなぜですか。そうすれば、さまざまなブラウザーでのコントロールのさまざまなレンダリングに関する問題に直面することはありません。

<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 = "";
}
于 2012-12-22T13:45:11.510 に答える