入力文字数に応じてメッセージを切り替えるテキストエリアを作る方法
入力文字数に応じてメッセージをリアルタイムで切り替えるテキストエリアを作る方法を紹介します。このサンプルでは、テキストエリアへ入力された文字数をJavaScriptで確認し、未入力・入力途中・十分な文字数という3つの状態に分けて、入力欄の下に表示するメッセージを自動で切り替えます。
お問い合わせ画面の質問内容、会員サイトのプロフィールや自己紹介、ECサイトのレビュー、アンケートの自由記入欄など、ある程度まとまった文章を入力してほしい場面で利用できます。文字数そのものを表示するだけではなく、入力状況に合わせて「入力してください」「もう少し詳しく入力してください」「十分な文字数が入力されています」と案内できるため、利用者が現在の入力状態を把握しやすくなります。
HTMLではテキストエリアとメッセージ表示欄を配置し、JavaScriptのinputイベントを使って入力のたびに文字数を確認します。このサンプルでは1文字以上50文字未満を入力途中、50文字以上を十分な文字数として判定します。判定基準となる50文字はJavaScriptから変更でき、CSSではフォームの横幅、余白、入力欄の高さ、枠線、角丸、メッセージの文字色などを調整できます。スマートフォン・タブレット・PCでも利用できるレスポンシブ対応のサンプルです。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
テキストエリアへ文章を入力すると、入力文字数に応じてメッセージがリアルタイムで切り替わります。未入力では「内容を入力してください。」、1〜49文字では「もう少し詳しく入力してください。」、50文字以上になると「十分な文字数が入力されています。」と表示されます。文字を削除して文字数が減った場合も、その時点の文字数に合わせてメッセージが自動で切り替わります。
コードをコピーして使おう!
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- 文字コード -->
<meta charset="UTF-8">
<!-- スマートフォン対応 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- ページタイトル -->
<title>入力文字数に応じてメッセージを切り替えるテキストエリア</title>
<!-- CSSファイルを読み込む -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- テキストエリア全体 -->
<div class="textarea-length-message_wrap">
<!-- タイトル -->
<div class="textarea-length-message_title">
お問い合わせ内容
</div>
<!-- 説明文 -->
<p class="textarea-length-message_text">
入力文字数に応じて案内メッセージが切り替わります。
</p>
<!-- 入力項目 -->
<div class="textarea-length-message_group">
<!-- ラベル -->
<label
class="textarea-length-message_label"
for="textarea-length-message">
内容
</label>
<!-- テキストエリア -->
<textarea
class="textarea-length-message_input"
id="textarea-length-message"
name="message"
placeholder="お問い合わせ内容を入力してください。"
aria-describedby="textarea-length-message-message"></textarea>
<!-- 入力状態メッセージ -->
<p
class="textarea-length-message_message is-empty"
id="textarea-length-message-message"
aria-live="polite">
内容を入力してください。
</p>
</div>
</div>
<!-- JavaScriptファイルを読み込む -->
<script src="script.js"></script>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。
InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLで文章を入力するテキストエリアと入力状態を案内するメッセージ欄を配置し、CSSでフォームやテキストエリア、状態ごとのメッセージ色を設定します。JavaScriptではテキストエリアの入力文字数をリアルタイムで取得し、未入力・1〜49文字・50文字以上の3段階に分けてメッセージを切り替えます。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlはテキストエリアの表示部分を構成するファイルです。「お問い合わせ内容」のタイトル、説明文、「内容」のラベル、テキストエリア、入力状態を表示するメッセージ欄を配置しています。同じ階層にあるstyle.cssとscript.jsもこのファイルから読み込みます。
style.cssはテキストエリア全体の横幅、余白、背景色、枠線、角丸、入力欄の高さ、フォーカス時の表示などを設定するファイルです。メッセージにはis-empty、is-progress、is-completeの3種類のクラスを用意し、入力状態によって赤色・オレンジ色・緑色へ切り替えます。
script.jsは入力文字数を確認してメッセージを切り替えるファイルです。テキストエリアのinputイベントを監視しているため、文字を入力したり削除したりするたびにupdateMessage()が実行され、現在の文字数に対応したメッセージへ自動的に更新されます。
設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを同じ階層で保存してください。保存後にsample/index.htmlをブラウザで開くと、index.htmlからstyle.cssとscript.jsが読み込まれます。ページを開いた直後はテキストエリアが空のため、「内容を入力してください。」と表示されます。
1文字以上49文字以下ではありません。コードではlength<50を使用しているため、正確には1〜49文字の場合に「もう少し詳しく入力してください。」と表示します。50文字に到達すると「十分な文字数が入力されています。」へ切り替わります。その後49文字以下まで削除すると入力途中のメッセージへ戻り、すべて削除すると未入力のメッセージへ戻ります。
この判定ではtextarea.value.lengthを使用しています。入力された文字列の長さを基準としており、文章の内容そのものを評価する処理ではありません。また、50文字以上の入力を必須にしたり、送信を禁止したりする処理はありません。入力状態の目安となるメッセージを表示するためのサンプルです。
カスタマイズできる内容
index.htmlでは「お問い合わせ内容」のタイトル、説明文、「内容」のラベル、プレースホルダー、初期状態で表示する「内容を入力してください。」の文章を変更できます。
style.cssでは全体の最大横幅、余白、背景色、枠線、角丸、テキストエリアの高さ、フォーカス時の表示、未入力・入力途中・十分な文字数それぞれのメッセージ色を変更できます。
script.jsでは判定基準となる文字数と、各状態で表示するメッセージを変更できます。現在はlength<50を境界としているため、50文字以上で完了状態になります。例えば100文字以上を基準にしたい場合は、この50を100へ変更します。
数値調整
style.css
max-width:700px;
全体の最大横幅です。値を大きくすると横に広がり、小さくするとコンパクトになります。
margin:40px auto;
全体の上下余白です。40pxを大きくすると上下の間隔が広がります。
padding:32px;
全体の内側余白です。値を大きくすると内容と外枠の間隔が広がります。
border-radius:18px;
全体の角丸です。値を大きくすると丸みが強くなります。
gap:10px;
ラベル、テキストエリア、メッセージの間隔です。値を大きくすると各要素の間隔が広がります。
min-height:180px;
テキストエリアの初期高さです。値を大きくすると入力欄が高く表示されます。
padding:14px 16px;
テキストエリアの内側余白です。14pxが上下、16pxが左右の余白です。
border-radius:10px;
テキストエリアの角丸です。値を大きくすると丸みが強くなります。
box-shadow:0 0 0 4px ...
テキストエリアへフォーカスしたときの外側の強調範囲です。4pxを大きくすると強調表示が広がります。
min-height:22px;
メッセージ表示欄の最小高さです。値を大きくするとメッセージ用に確保する高さが大きくなります。
script.js
length<50
入力途中と十分な文字数を分ける基準です。現在は50文字を境界としており、1〜49文字は入力途中、50文字以上は十分な文字数として扱います。この50を変更すると判定基準を変更できます。
レスポンシブ対応
このサンプルはstyle.cssでレスポンシブ対応しています。全体へwidth:100%とmax-width:700pxを設定しているため、画面幅が狭くなると利用できる横幅に合わせて縮小します。また、@media (max-width:640px)を使用し、640px以下では上下余白を24px、内側余白を24px 18pxへ変更します。スマートフォン・タブレット・PCの画面幅に合わせて利用できます。
コメント