シナリオは次のとおりです。
「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 を使用しています。
ヒント/ヘルプをいただければ幸いです;)