libro
www.tuyano.com
初心者のためのJavaScriptプログラミング入門

DOMによるフォーム・コントロールの操作 (5/6)

作成:2010-04-02 15:43
更新:2010-05-11 18:47

■複数選択可能な<select>の処理

ラジオボタンと同様に、「複数の項目から選ぶ」という操作を行うのが選択リストのコントロールです。<select>タグで作成されるものですね。これも扱いには注意が必要です。この<select>には、「multiple」という属性があります。これにより、複数項目を選択可能にすることができます。

複数選択を許可せず、1つの項目しか選択できない場合、<select>の利用は非常に単純です。単に<select>のDOMオブジェクトからvalueプロパティで選択された値を取り出すだけです。が、複数項目が選択可能であった場合、「valueを調べれば終わり」とはいきません。何しろ、いくつの項目が選択されているかもわからないのですから。この場合、valueでは、複数選択されている項目の最初の1つしか得られません。

では、どうするか? <select>のDOMオブジェクトには「options」というプロパティがあります。これは、<select>に用意されている<option>タグのDOMオブジェクトをひとまとめにしてあるプロパティです。

ここから順に<option>のオブジェクトを取り出し、その「selected」プロパティをチェックすれば、その項目が選択されているかどうかわかります。selectedは、選択状態を真偽値で示すプロパティです。

○複数項目選択の利用例○

下のリスト部分に、簡単なサンプルをあげておきます。ここでは、いくつかの項目を用意しておき、それを選択すると、選択した項目がすべて上に表示されます。<select>のオブジェクトからoptionsプロパティの値を取り出し、それをforで繰り返し処理していますね。

このforも、やはりfor inは使いません。基本的に、複数のDOMオブジェクトをまとめて扱うプロパティは、配列ではなくHTMLCollectionというオブジェクトとして値を管理するので、すべてfor inは使えない、と考えておきましょう。

○onselectedイベント○

なお、ここでは<select>タグに、「onchange="doAction();"」というようにしてイベントの設定を行っています。この「onchange」は、「コントロールの値が変更されたときに発生するイベント」なのです。つまり、<select>で何かを選択すると、その瞬間にこのイベントが発生します。

<select>の場合onclickよりもこちらのほうが使用イベントとして自然でしょう。このonchangeは、この他にもラジオボタンや入力フィールド関係などでも用意されています。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

<html>
	<head>
		<script type="text/javascript">
		<!--
		function doAction(){
			var select = document.getElementById("select1");
			var options = select.options;
			var result = "";
			for(var i = 0;i < options.length;i++){
				var option = options[i];
				if (option.selected){
					result += '"' + option.value + '" ';
				}
			}
			var message = document.getElementById("message");
			message.innerHTML = result;
		}
		//-->
		</script>
	</head>
	<body>
		<H1>TEST.</H1>
		<div id="message">OSを選択:</div>
		<form onsubmit="return false;">
			<select id="select1" size="5" multiple="multiple"
					onchange="doAction();">
				<option value="Windows">Windows</option>
				<option value="Mac OS">Mac OS</option>
				<option value="Linux">Linux</option>
				<option value="Android">Android</option>
				<option value="iphone">iphone</option>
			</select>
		</form>
	</body>
</html>

※関連コンテンツ

「初心者のためのJavaScriptプログラミング入門」に戻る