《 12:30 PM 公開/更新》
チェックボックスと連動するテキスト入力欄があるフォームでは、チェックボックスにチェックが入っているときにだけ対応するテキスト入力欄を有効化(=文字が入力できる状態)し、チェックが入っていない場合はテキスト入力欄を無効化(=文字が入力できない状態)すると分かりやすくて便利です。JavaScriptを使って、条件に応じて対象テキスト入力欄のdisabledプロパティの値を変えるだけで、簡単に有効化・無効化を切り替えられます。
チェックボックスやラジオボタンを使って項目の選択を求める入力フォームでは、「あるチェックボックスに対応したテキスト入力欄」がある場合があります。
例えば以下のサンプルでは、「その他」というラベルのチェックボックスにだけ、対応するテキスト入力欄があります。
このとき、「その他」というチェックボックスにチェックが入っているときにだけ、対応するテキスト入力欄を有効(=文字が入力できる状態)にし、チェックが入っていない場合はテキスト入力欄を無効(=文字が入力できない状態)にしておくと便利です。
:
上記のサンプルでは、チェックボックスの「その他」欄にチェックを入れると、隣のテキストフォームが有効化されます。「その他」欄にチェックが入っていなければ、隣のテキストフォームは無効化され、入力できない状態になります。
このようなインターフェイスにしておけば、「『その他』項目専用の入力欄がある」という事実を見せたまま、「そこへの入力が必要なのかどうか」を示すことができ、便利です。
さて、上記のように「チェックボックスのチェック状態と連動するテキストフォーム」を作る方法は、以下の通りです。わりと簡単です。
まず、HTMLを以下のように記述しておきます。ここでは、チェックボックスとテキスト入力欄を作っているだけです。
HTMLソース
<label><input type="checkbox" name="scb1" value="on">りんご</label><br> <label><input type="checkbox" name="scb2" value="on">みかん</label><br> <label><input type="checkbox" name="scb3" value="on" onclick="connecttext('textforscb3',this.checked);">その他</label>: <input type="text" name="othertext" id="textforscb3" value="">
上記では、
……の4つを作っています。
ここでのメインは「★」記号を付けた2行です。
ラベル「その他」のチェックボックスを作るinput要素には、onclick属性を使って以下のように記述しています。
onclick="connecttext('textforscb3',this.checked);"
ここでの「textforscb3」は、対応するテキストフォームに付加したid名です。
実際にテキストフォームに加えたid名に書き換えて使って下さい。
次に、チェックボックスがクリックされたときに実行される関数「connecttext」を作ります。
以下のJavaScriptソースは、処理内容が分かりやすいように、冗長に記述しています。
JavaScriptソース
function connecttext( textid, ischecked ) { if( ischecked == true ) { // チェックが入っていたら有効化 document.getElementById(textid).disabled = false; } else { // チェックが入っていなかったら無効化 document.getElementById(textid).disabled = true; } }
上記で作成したconnecttext関数は、引数に2つの値を取ります。
です。
ここで、チェックが入っていればテキストフォームを有効化し、チェックが入っていなければテキストフォームを無効化しています。
テキストフォームなどの入力欄の有効・無効を切り替えるには、disabledプロパティの値を変更するだけです。
disabledプロパティに、
されます。
「trueで無効化、falseで有効化」というのは、なんとなく感覚的に変な気がするかも知れませんが(^_^;)、これはプロパティが「disabled(無効)」だからです。
「無効化するかどうか」を設定するプロパティなので、「trueで無効化、falseで有効化」というわけです。
ちなみに、このconnecttext関数は、もっと短く以下のように書くとスマートかも知れません。
JavaScriptソース
function connecttext( textid, ischecked ) { // チェック状態に合わせて有効・無効を切り替える document.getElementById(textid).disabled = !ischecked; }
上記では、対象のテキストフォームのdisabledプロパティに、「!ischecked」を代入しています。変数名の先頭に「!」記号を付加しています。これは、「ischecked」の否定です。
変数「ischecked」には、チェックボックスがチェックされているとき「true」が、チェックされていないときに「false」が入ります。
なので、これの否定を取れば(=「!ischecked」と書けば)、チェックボックスがチェックされているとき「false」が、チェックされていないときに「true」が入ります。
したがって、これをdisabledプロパティにそのまま代入してやれば、テキストフォームの有効化・無効化ができます。
というわけで、チェックボックスに合わせてテキスト入力欄の有効・無効を切り替える方法でした。
なお、似たような用途の方法として、
という記事もありますので、ぜひご参照下さい。
()
(前の記事) « 期限日時までをリアルタイムにカウントダウン表示する方法
前後のJavaScript TIPS
< 旧 / 新 >
▼このページに関連しそうな記事が約8本くらい自動表示されています。(たぶん)