2024
11
23
2010
11
09
リストボックスを JavaScript で作る。
前回の「JavaScript でHTML要素を生成する関数」の記事で JavaScriptでHTML要素を生成する関数として、neta.elements.element を作成しました。今回は、これを利用してリストボックスを作成しましょう。
リストボックスは、選択肢のリストを表示しその中から値を選ばせるものです。HTMLのフォーム部品では、SELECT がこれに当たります。今回紹介する neta.elements.ListBox でも、まず SELECT 要素を生成します。
ListBox コンストラクタの書式
listbox=new neta.elements.ListBox(container)
引数は、リストボックスを配置する先の HTML 要素です。実際に配置するには draw メソッドを実行します。
draw メソッドの書式
listbox.draw(list)
引数のリストから OPTION 要素を生成して SELECT 要素に追加します。そして、文書の指定した箇所に SELECT 要素を配置します。
draw メソッドの引数
draw メソッドの引数は、配列です。配列の要素には次の3種類を想定しています。
配列
配列の要素も配列の場合、その1番目の要素を OPTION 要素の value に、2番目の要素を innerHTML に割当てます。
[[1,'A'], [2,'B'], [3,'C']]
オブジェクト
配列の要素がオブジェクトの場合、v プロパティの値を OPTION 要素の value に、f プロパティの値を innerHTML に割当てます。
[[1,'A'], [2,'B'], [3,'C']]
文字列、数値
配列の要素が文字列か数値の場合、その値を OPTION 要素の value と innerHTML の双方に割当てます。
['A', 'B', 'C']
記述例
neta.addListener(function(){ var container=document.getElementById('container'); var listbox=new neta.elements.ListBox(container); listbox.draw(['A','B','C']); var container2=document.getElementById('container2'); var listbox2=new neta.elements.ListBox(container2); listbox2.draw(['E','F','G']); document.getElementById('btn').onclick=function(){ alert( listbox.element.value +' と ' +listbox2.element.value +' が選択されました'); } });
実行例
ソースコード
if(!window['neta'])window['neta']={}; if(!window['neta']['elements'])window['neta']['elements']={}; (function(){ var a=neta.elements; a.ListBox=function(container){ this.container=container||document.body; this.element=a.element('select'); var self=this; self.draw=function(list){ list=list||[]; self.element.innerHTML=''; for(var i=0,val,formatted;i<list.length;i++){ if(typeof list[i]!='object'){ val=list[i];formatted=list[i]; }else if(list[i].length){ val=list[i][0];formatted=list[i][1]; }else{ val=list[i]['v'];formatted=list[i]['f']; } var opt=a.element('option',{value:val,innerHTML:formatted}); self.element.append(opt); } self.container.appendChild(self.element); } } })();
収録先
neta.elements.js2010/11/09 (Tue.) Trackback() Comment(0) JavaScript
Comments
Trackback
Trackback for this entry: