閲覧者から情報をもらうform要素

本節の目的
閲覧者から情報をもらうHTML要素である form要素の利用方法を学習します。
これによって得られた情報を元に、JavaScriptを使って処理を行うことができます。

form要素とは

form要素は、Webページ閲覧者から必要な情報を入力してもらい、 それをWebサーバへ送る手助けをするHTML要素です。


atten先週から、JavaScriptの勉強をしていますが、このformは、HTMLの要素です。 混同しないようにして下さい。 JavaScriptプログラムで処理するときに、 Webページ閲覧者から情報(データ)を受け取るための手段として、 ここで勉強しています。

「Webサーバへ情報を送る」機能は、 Webサーバ上でのプログラムも作る必要がありますが、 ここでは、「Webページ閲覧者から必要な情報を入力してもらう」機能だけを説明し利用します。

実際に「Webページ閲覧者から必要な情報を入力してもらう」機能を発揮するのは、 form要素自身では無く、その子要素として動作するform要素関連の要素です。 じつは、先週ボタンを作ったinput要素も、このform要素関連の要素なのです。 input要素以外にも、選択肢をポップアップしてくれる select要素や、 文書を入力してもらう領域を作ってくれる textarea要素など、 関連する要素がいくつかありますが、 ここでは、利用頻度の高い input要素についてだけ説明します。

一般的な、input要素の利用形式は次のようになります。

<form name="ccccc">
<input type="xxxxx" value="yyyyy" name="zzzzz" イベントハンドラ="処理名">
</form>

上記の意味は次のようになります。 実際に利用するときには、 ccccc、xxxxx、yyyyy、zzzzz 等には、適当な値を設定します。

  • 「type」の値により、入力形式を変えることができます。 以下に説明する「button」、「text」、「radio」などの他に、 「file」、「checkbox」など様々なものがあります。
  • 「value」を指定することで、初期データを与えることができます。
  • 「name="ccccc"」がform要素の名前を表し、 「name="zzzzzz"」がinput要素の名前を表しています。
    Webページ閲覧者が入力した情報(データ)は、この場合、 「document.ccccc.zzzzz.value」で、参照することができます。

input要素の各種入力形式

それでは、type属性を変えたときの input要素の入力形式について、学習しましょう。 ただし、ここではイベントハンドラは、省略しています。

type="button" (ボタン)

<form name="button_test">
   <input type="button" name="button_yes" value="はい">
   <input type="button" name="button_no" value="いいえ">
</form>

type属性が button の時の value 属性は、先週説明しましたように ボタンの名前(説明)としてボタン内に表示されます。

上記のHTMLをWebブラウザで表示すると以下のようになります。 (ただし、input要素が目立つように、背景色を付けています。 以下のサンプルも同様です。)

ボタンをクリックしてみてください。どうなりましたか? (次の注意を読んでください。)


attenこの節のinput要素に関する例題では、イベントハンドラは省略していますので、 ボタンを押したり、文字を入力したりしても何も起こりません。 (ボタン自身は、押されたような微妙な動きをします。)

type="text" (テキスト入力フィールド)

<form name="text_test">
   <input type="text" name="shimei" value="熊本 太郎">
</form>

name 属性の値は、このフィールドを表す変数名となりますので、 内容を表す名前を考えてつけてください。
type属性が text の時のvalue属性は省略可能です。 指定すると、テキストフィールドの初期値としてフィールド内に表示されます。

上記のHTMLをWebブラウザで表示すると以下のようになります。

type="radio" (ラジオボタン:どれか一つを選択するボタン)

<form name="radio_test">
   <input type="radio" name="hanndan" value="yes"> 
   はい
   <input type="radio" name="hanndan" value="no" checked> 
   いいえ
</form>

type属性が radioの場合は、以下のような特徴があります。

  • type属性が radioの場合、 name属性は、ここのラジオボタン全体の名前を表します。 (ある質問に対する回答の選択肢のような)一つのグループ内では、 name属性の値はすべて同じにします。
  • value 属性は、このボタンを表す変数名となりますので、 内容を表す名前を考えてつけて下さい。
  • checked属性を書いておくと、 始めからその選択肢が選ばれている (チェックされている) ようになります。
  • ボタンの説明(意味)は、 このHTML要素の外側に書きます。 つまり、通常の文章として書くことになります。
    (上の例では、「はい」や「いいえ」がそれに対応します。)

上記のHTMLをWebブラウザで表示すると以下のようになります。

はい いいえ

form関連要素による情報(データ)の入力

form関連要素である input要素は、type属性を buttonにすることで ブラウザ上にボタンを作ることができ、そのボタンをクリックしてもらうことにより、 処理を依頼することができます。これは、先週学んだイベント処理の応用ですね。

また、type属性を textにすると文字の入力はできますが、 それ自身とイベントハンドラを組み合わせるのは困難です。 なぜなら、「自分の入力したい文字を全部入力した」 というイベントを処理するイベントハンドラは無いからです。
そこで、type属性を textにした input要素(テキスト入力フィールド)は、 type属性をbuttonにしたボタンと組み合わせることで、 Webページを閲覧している人から文字を入力してもらうことにします。

ボタン(type="button")と イベントハンドラの組み合わせの例

これは、前回の例題でも利用しました。

次のサンプルは、ボタンを二つ付けてみました。 今度は、ボタンをクリックしたら、なんらかの反応がありますので、 クリックしてください。

上記のボタンを作るには、次のHTMLと、

 <form name="two_buttons">
   <input type="button" value="はい" onClick="push_yes()">
   <input type="button" value="いいえ" onClick="push_no()">
 </form>

次のJavaScriptの定義があればよいですね。

function push_yes () {
  window.alert('良い選択ですね。');
}
function push_no () {
  window.alert('あなたは、なかなかできた人ですね。');
}

テキスト入力フィールド(type="text")とボタン
及び イベントハンドラの組み合わせの例

Webページ閲覧者に文字を入力してもらい、それを使って処理をしてみましょう。

次の入力フィールドの「熊大 太郎」を消して、あなたの名前を入力した後、 ボタンを押してみて下さい。
あなたの入力した氏名に対してメッセージが表示されたでしょう? 別の氏名(文字列)を入力しても、その氏名(文字列)に対するメッセージが表示されます。

お名前は?

atten入力フィールド中の文字は、一度書き換えるとその状態が維持されます。 つまり、一度書き換えると、このページを再読み込みしても、 元の「熊大 太郎」には戻りません。

上記は、次のHTMLにより、構成されています。

<form name="hello">
   お名前は?
   <input type="text" name="shimei" value="熊大 太郎">
   <input type="button" value="押してください" onClick="henji()">
</form>

上記のHTMLの解説を次に示します。

  • form要素の name属性の値である hello は、 form要素を識別するための名前です。 好きな名前を付けることがでますが、 HTMLファイル中で、 ユニークである(他に同じ名前のものが無い)必要があります。 このname属性の値 (この例では「hello」)が、JavaScript処理の定義中で重要な役割を果たします。
  • 「お名前は?」というところは、単なる文字ですので、 そのまま表示されます。
  • <input type="text" ...> の行は、 先に示した例と全く同じです。 ここでは、上のform要素のときと同様に、 name属性の値であるshimeiが、 JavaScript処理の定義中で、重要な役割を果たします。 ところで、value属性に「熊大 太郎」が指定されていますが、 これは、省略できるでしょうか?
  • 次の <input type="button" ...> の行は、 もう説明の必要は無いでしょう。
    ボタンがクリックされると、 自作のhenji() という関数(メソッド)が実行されます。
    ところでボタンに表示される文字は、どれで指定するわかりますか?

JavaScript関数である henji()の定義を次に示します。

function henji() {
  namae = document.hello.shimei.value;
  kotoba = namae + "さん、こんにちは。頑張ってますね。";
  alert(kotoba);
}

上記のJavaScriptの解説を行う前に確認です。
上記JavaScriptの直前に示した、関数(メソッド) henji を利用して名前を尋ねるHTMLのサンプルにおいて、 form要素に付けた名前(name属性の値)は何でしたか? また、type属性がtextのinput要素に付けた名前(name属性の値)は何でしたか?

それでは、上記のJavaScriptの解説を次に示します。

  • document .hello .shimei.value は、 いま開いているブラウザ(document)の中の、 'hello 'という名前の form要素中の、 'shimei'という名前のフィールドの値(value)ということになります。 つまり、テキストフィールド(文字を入力する四角い枠)に入力された文字列は、 document.hello.shimei.value という変数に代入れされているのです。
  • 上記の値を、'namae'という変数に代入しています。
  • 次の行で、その値に、 "さん、こんにちは。頑張ってますね。" という文字列を追加した後、 'kotoba' という変数に代入しています。
    ここで用いている、'+' 記号はどのような働きをするのでしたか?

    atten'namae = ...'の行を省略して、 kotoba = document.hello.shimei.value + "さん、こんにちは。頑張ってますね。"; としても、同じ効果が得られます。

  • 最後に、'kotoba'に代入されたメッセージを、 alert()で表示しています。

演習: form要素を用いた閲覧者から情報をもらう演習

上記の例のような入力した氏名に対してメッセージが表示されるJavaScriptを動かしてみましょう。 以下の指示に従い、 form要素を用いて、Webページ閲覧者から情報を入力してもらい、 その入力された情報を利用して処理を行うJavaScript処理定義の演習を行い、 これらの記述方法と動作を確認してください。

  1. 「学生番号exjs1.html」のbody要素の最後に(</body>の上に)、 次のHTMLを追加し、上書き保存してください。
    <form name="hello">
       お名前は?
       <input type="text" name="shimei" value="熊大 太郎">
       <input type="button" value="押してください" onClick="henji()">
    </form>
    
  2. 次に「myscript2.js」に、 以下のJavaScriptによるの処理の定義をコピー&ペーストし、 上書き保存して下さい。
    function henji() {
      namae = document.hello.shimei.value;
      kotoba = namae + "さん、こんにちは。頑張ってますね。";
      alert(kotoba);
    }
    
  3. 上記の学生番号exjs1.htmlを、Webブラウザで表示し、 テキストフィールドに適当な文字を入力して「押してください」ボタンをクリックし、 所望の文字が表示されることを確認してください。
  4. 次に、下に示すHTMLを学生番号exjs1.htmlのbody要素の最後にコピー&ペーストしてください。 そして、このHTMLが上のものと同じ動作をするように、 「myscript2.js」に新しい関数(メソッド)を定義し、 所望の動作をすることを確認してください。
    <form name="hi">
       お名前は?
       <input type="text" name="na" value="熊大 太郎">
       <input type="button" value="押してください" onClick="message()">
    </form>
    
  5. 現在は、「熊大 太郎」と入力すると、 「熊大 太郎さん、こんにちは。頑張ってますね。」と、表示されますが、 これを、「こんにちは、熊大 太郎さん。これからも頑張ってくださいね。」 と表示されるように、JavaScriptの処理の定義を書き変えてください。 書き換えるのは、4.で定義した関数だけで結構です。



Copyright (C) Kenichi Sugitani 2008, All Rights Reserved

Last modified: Thursday, 25 February 2016, 4:05 PM