1

シナリオは次のとおりです。

「XY文字が残っています」という表示を表示し、テキストボックス内の文字をユーザータイプとして制限しようとしています。私も複数行の tebox を持っているので、MaxLength が常に機能するとは限りません (心配しないでください。サーバー側でもチェックします)。

これが私が学んだことです: onkeyup はこの関数で完全に動作します:

function LimtCharacters(txtMsg, CharLength, indicator) {
chars = txtMsg.value.length;
document.getElementById(indicator).innerHTML = CharLength - chars;
if (chars > CharLength) {
    txtMsg.value = txtMsg.value.substring(0, CharLength);
}
}

ただし、貼り付けられた値も検出する必要があります。ユーザーが CTRL+V を使用する場合は問題ありませんが、ユーザーがマウスを使用して貼り付けた場合は機能しません。この場合、遅延が必要であることを学びました(ここ): Javascript OnPaste

そのため、次のように更新 (onPaste イベントを追加) しました。

/* FUNCTION THAT LIMITS INSERTED CHARACTERS IN TEXTBOX */

function LimtCharacters(txtMsg, CharLength, indicator) {
chars = txtMsg.value.length;
document.getElementById(indicator).innerHTML = CharLength - chars;
if (chars > CharLength) {
    txtMsg.value = txtMsg.value.substring(0, CharLength);
}
}

/* Delay is needed if user uses paste with mouse (right click and paste). After delay same function (LimtCharacters) can be called*/
function pasted(txtMsg, CharLength, indicator) {
setTimeout(function () {
    LimtCharacters(txtMsg, CharLength, indicator);
}, 10);
}

ASPX ファイルのマークアップ:

<asp:TextBox ID="tbTitle" runat="server" ClientIDMode="Static" MaxLength="255" 
                onKeyup="LimtCharacters(this,255,'lblTitleCount')"
                onPaste="pasted(this,255,'lblTitleCount')" />

<asp:Label ID="lblTitleCount" Text="255" runat="server" ClientIDMode="Static" />

lblTitle は、「残り文字数」の値を表示するラベルです。

FireFox と Chrome で完璧に動作します。しかし、IEでは機能しません。

私は何を間違っていますか?

Visual Studio 2010 .net を使用しています。

ヒント/ヘルプをいただければ幸いです;)

4

1 に答える 1

2
<script type="text/javascript">
    $(document).ready(function () {
        $("#tbTitle").on("input", function () {
            LimtCharacters(this, 255, 'lblTitleCount');
        });
    });               
</script>


//FUNCTION THAT LIMITS INSERTED CHARACTERS IN TEXTBOX 

function LimtCharacters(txtMsg, CharLength, indicator){
    chars = txtMsg.value.length;
    document.getElementById(indicator).innerHTML = CharLength - chars;
    if (chars > CharLength) {
        txtMsg.value = txtMsg.value.substring(0, CharLength);
        //Text in textbox was trimmed, re-set indicator value to 0
        document.getElementById(indicator).innerHTML = 0;
    }
}
于 2013-10-28T07:39:24.667 に答える