[jQuery]テキストエリアに文字数制限をカウントダウン形式で制御する
2019年7月4日
テキストエリアに入力制限をかける。
・サンプルコード
テキストエリア入力時に20文字を超えると入力文字が反映されないようにする。 改行は1文字としてカウントする。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>テキストエリア文字数制限</title>
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.4.1.min.js"></script>
</head>
<body>
<p>残り「<span id="limitlbl">0</span>」文字入力可能</p>
<textarea id="memo" limit="20" cols="30" rows="10" style="overflow:auto" wrap="off"></textarea>
</body>
<script language="JavaScript" type="text/JavaScript">
$(function(){
// テキストエリアの制限数を設定する
limit = $('#memo').attr("limit");
$('#limitlbl').text(limit);
/**
* 文字数制限
**/
$("[limit]").off(".inputcontrol.limit").on("keyup.inputcontrol.limit", function(){
var limit = $(this).attr("limit"); // 制限文字数を取得
var currentval = $(this).val(); // 入力された文字列を取得
var remaining = limit - currentval.length; // 残りの入力文字数を取得
$('#limitlbl').text(remaining); // HTMLに残り文字数を設定
// 制限文字数を超えると入力が反映されないようにする
if (currentval.length >= limit) {
$(this).val(currentval.substr(0,limit));
}
});
});
</script>
</html>
・実行結果

規定の文字数の入力があると入力文字が追加されないようになる。 改行も1文字として扱っているがあまり細かく制御しても 結局サーバーサイド側でチェックするので割愛。 その他、入力時に日本語の場合確定せずにキーを連打すると 残り文字数がおかしな挙動をする。 気になる場合は残り文字数がマイナスになった場合はテキストに 「これ以上入力できません」など代替えテキストに差し替える処理をいれるといい。 ほんとは各行に対して1行20文字までのような制限をかけたかったが コピペで挙動がおかしくなったり半角と全角の混在、キーイベント諸々 見るのに時間がなくなった。 いろいろチェックしだすとキリがなかったのでサーバーサイドでチェックした方がいい。