2

テストのために、クリックするとテキストボックスを非表示にするボタンを作成します。ボタンを押すための JavaScript は次のようになります。

function showCommentBox() {
    var el = document.getElementById('replyBox');
    el.setAttribute("style", "display:none;");
    return false;
}

asp コードは次のようになります。

<textarea  id="replyBox" runat="server" class="replyBox"></textarea>
<asp:Button runat="server" id="replyBtn" onClientClick="return showCommentBox();" class="replyBtnClass" Font-Bold="true" Text="Reply"/>

サーバー上で実行されている要素を変更しようとすると、ポストバックが発生するようです。私の論理に何か問題がありますか、それともこれは不可能ですか?

4

2 に答える 2

2

サーバー コントロールの生成された ID を見ると、設定したものとは異なることがわかります。設定している ID はコード ビハインド ID です。ページがレンダリングされると、要素にそのClientID. これが問題を抱えている理由です。

次の 2 つの選択肢があります。

  1. ClientIDModeを「静的」に設定します。これにより、要素のIDが設定したとおりに保持されます。この ID を持つ要素が 1 つしかない場合にのみ、これを行ってください。そうしないと、JavaScript がおかしくなり始めます。

  2. JavaScript の ID を動的に設定します。このような:

    document.getElementById('<% replyBox.ClientID %>');

これにより、レンダリングされたサーバー コントロールの ClientID が JavaScript に直接挿入されます。注: これは、JavaScript が aspx ページにある場合にのみ機能します。JavaScript が js ファイルに移動された場合、これは機能しません。

于 2013-04-25T19:56:47.570 に答える
1

あなたの場合、この行は undefined を返します

var el = document.getElementById('replyBox');

属性replyBoxを持つテキストエリアのIDとして使用しているように。このように関数でテキストエリアを使用または参照runat="server"する必要がありますClientIdMode="Static"ClientId

document.getElementById('<% replyBox.ClientID %>');
于 2013-04-25T19:58:43.483 に答える