DOMによるフォーム・コントロールの操作 (5/6)
作成:2010-04-02 15:43
更新:2010-05-11 18:47
更新: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は使えない、と考えておきましょう。
なお、ここでは<select>タグに、「onchange="doAction();"」というようにしてイベントの設定を行っています。この「onchange」は、「コントロールの値が変更されたときに発生するイベント」なのです。つまり、<select>で何かを選択すると、その瞬間にこのイベントが発生します。
<select>の場合onclickよりもこちらのほうが使用イベントとして自然でしょう。このonchangeは、この他にもラジオボタンや入力フィールド関係などでも用意されています。
複数選択を許可せず、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は、この他にもラジオボタンや入力フィールド関係などでも用意されています。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
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プログラミング入門」に戻る