0

このシナリオでは、テキスト ボックスと、ラベルがテキスト ボックスで使用可能な残りの文字のカウントダウンであるラベルがあります。例: 「残り 239 文字」。

個人的にjavascript関数を数回使いたいので、関数に変数を渡したい。これらは、maxlength (長さ)、textbox (フィールド)、および label (カウンター ラベル) です。

ただし、私が抱えている問題は、これが単に機能していないことです。IEだけのものではないことを確認するために、Firefox 18でテストしましたが、ラベルが変更されない場所でも同じ結果が生成されます... onKeyUpメソッドが呼び出されていることに注意してください。

とにかく私のコード。

JavaScript

<script type="text/javascript">
    function countCharacters(textbox, label, maxcount) {
        var count = parseInt(document.getElementById(textbox).value.length);
        document.getElementById(label).innerHTML = maxcount - count;
    }

ラベルとテキストボックス

            <asp:TextBox ID="tbComment01" runat="server" CssClass="txt" TextMode="MultiLine" Width="500px" Visible="false" MaxLength="500"></asp:TextBox>
        <br />
        <asp:Label ID="lbCommentCount01" runat="server" Text="Label" Visible="false" CssClass="size11_text_blurb"></asp:Label>

コードビハインド

tbComment01.Attributes.Add("onKeyUp", "countCharacters(" + tbComment01.ClientID + "," + lbCommentCount01.ClientID + ", 500)");

乾杯!

トレント

4

2 に答える 2

1

問題は、関数のパラメーターに引用符がなかったためです。したがって、ID ではなく HTML 要素オブジェクトを渡していました。したがってgetElementById、IDではなくオブジェクトで使用していました[これは文字列である必要があります]

以前は、関数は次のように見えました

onKeyUp="countCharacters(tbComment01,lbCommentCount01, 500)"

したがってHTMLTextAreaElement、文字列「tbComment01」の代わりに渡します

そしてあるべき

onKeyUp="countCharacters('tbComment01','lbCommentCount01', 500)"

これで修正されるはずです。分離コードからの一重引用符を追加したことに注意してください

tbComment01.Attributes.Add("onKeyUp", "countCharacters('" + tbComment01.ClientID + "','" + lbCommentCount01.ClientID + "', 500)");

またはそれ以上

tbComment01.Attributes.Add("onKeyUp",String.Format("countCharacters('{0}','{1}', 500) ", tbComment01.ClientID, lbCommentCount01.ClientID)
于 2013-01-25T10:46:33.450 に答える
1

これは、lbCommentCount01 がまだVisible="false"サーバー側にVisible="false"あり、コントロールがページにレンダリングされていないことが原因のようです。(これは帯域幅を節約するためです。)

コントロールを最初は非表示にしたいが、javascript で表示できるようにする場合は、必ず使用style="display:none;"し、コードでそれを削除してください。

document.getElementById('yourid').style.display = '';
于 2013-01-25T10:38:58.077 に答える