MTAppMaxLength

テキスト入力欄に最大文字数を設定し、残り文字数カウンタの表示と超過警告を行う jQuery プラグイン。送信時に超過欄があれば alert で知らせて送信を止める。

テキスト入力欄(input / textarea)に最大文字数を設定し、残り文字数カウンタの表示と超過時の警告を行う jQuery プラグインです。入力のたびに残り文字数を更新し、超過すると入力欄とカウンタを赤く表示します。さらにフォーム送信時に、超過している欄があれば alert で知らせて送信を止めます。

構文

$(selector).MTAppMaxLength(options);

$.fn プラグイン($(selector).MTAppMaxLength(...))です。対象要素(this)を返すのでチェーンできます。

パラメータ

options {Object} — maxLength のみ必須。以下のプロパティを持ちます。

プロパティ既定値説明
maxLengthnumber0必須。最大文字数(1 以上)。1 未満のときは何もせず対象要素をそのまま返す
addAttrbooleanfalsetrue で対象要素に maxlength 属性を付与する
viewCountbooleantrue残り文字数カウンタを表示するか。false でカウンタ要素を hidden クラスで隠す(カウント自体は動作)
eachAlertbooleanfalse送信時の警告を欄ごとに出すか。false のときは超過欄があればまとめて 1 回警告
overStyleObject{ border: '1px solid #ff0000', color: '#ff0000' }超過時に入力欄へ適用する CSS(プロパティ/値のペア)
overStatusStyleObject{ color: '#ff0000' }超過時にカウンタへ適用する CSS
l10nObject | nullnull表示文言の上書き(後述の L10N キー)。指定したキーだけ上書きされる

L10N キー

l10n で上書きできるキーと既定値(言語は mtappVars.language で自動判定)。

キー日本語英語用途
characters文字(空文字)文字数の単位
maximumCharacters最大文字数Maximum characters未入力時のカウンタ見出し
remainingCharacters残り文字数Remaining characters入力中(範囲内)のカウンタ見出し
overCharacters最大文字数を[_1]文字超えています[_1] characters over超過時のカウンタ表示([_1] に超過文字数)
fieldfield欄ごと警告のラベル接尾辞
alertMessageEach最大文字数を超えています。Number of characters exceeds maximum allowed.欄ごと警告の本文
alertMessageTotal最大文字数を超えている入力欄があります。There are fields whose number of characters exceeds maximum allowed.まとめ警告の本文

戻り値

{jQuery} — 対象要素(チェーン可能)。maxLength が 1 未満の場合も this を返します。

保存される値

このメソッドは保存される値を変換しません(文字数のカウント・超過警告・送信ブロックのみ)。入力されたテキストがそのまま保存されます。上限を超えた状態では送信時に警告して送信を止めるため、通常は上限内のテキストが保存されます。

使用例

基本(残り文字数を表示)

$('#customfield_summary').MTAppMaxLength({ maxLength: 120 });

属性も付与し、欄ごとに警告

$('input.text').MTAppMaxLength({
    maxLength: 40,
    addAttr: true,   // maxlength="40" を付与
    eachAlert: true  // 送信時、超過欄ごとに警告
});

カウンタを隠して超過チェックだけ行う

$('#customfield_title').MTAppMaxLength({ maxLength: 32, viewCount: false });

超過時の見た目と文言をカスタマイズ

$('#customfield_note').MTAppMaxLength({
    maxLength: 200,
    overStyle: { background: '#ffecec', color: '#c00' },
    l10n: { remainingCharacters: 'あと', characters: '字' }
});

user.js での記述例

user.js(「デザイン → user.js を編集」)に書く場合は、mtappVars.screen_id で画面を判定して呼び出します。

(function ($) {
    if (typeof mtappVars !== 'object') return;
    if (mtappVars.screen_id === 'edit-entry') {
        $('#customfield_summary').MTAppMaxLength({ maxLength: 120 });
    }
})(jQuery);

生成される HTML

対象要素は mtappmaxlength-wrapper でラップされ、直後に残り文字数カウンタ(mtappmaxlength-status)が追加されます。対象要素自身には mtappmaxlength-item クラスが付きます。

<span class="mtappmaxlength-wrapper">
    <input type="text" id="customfield_summary" class="text mtappmaxlength-item">
    <span class="mtappmaxlength-status">残り文字数 : 105文字</span>
</span>

viewCount: false のときはカウンタに hidden クラスが付きます。

<span class="mtappmaxlength-status hidden"></span>

補足

  • カウンタの表示は入力文字数で 3 段階に変化します。未入力=「最大文字数 : N文字」、範囲内=「残り文字数 : (N − 入力数)文字」、超過=「最大文字数を M文字超えています」(M=超過分)。
  • 超過時は overStyleoverStatusStyle がインライン CSS として適用され、範囲内に戻すと解除されます。
  • 送信時の検証は、最初にマッチした要素の所属フォームに submit.MTAppMaxLength ハンドラとして 1 つだけ登録され、ページ内の すべての .mtappmaxlength-item を対象にチェックします。超過欄があれば送信を中止して警告し(eachAlert で欄ごと/まとめを切替)、無ければ送信します。
  • 文字数は String.length(UTF-16 コードユニット数)で数えます。サロゲートペアの絵文字などは 2 としてカウントされます。

関連

  • MTAppNumChecker — 数値欄の全角→半角変換と範囲(最小・最大)チェックを行う。
  • MTAppCustomize — フィールドのラベルやヒントをまとめてカスタマイズする。