ポップアップメニューでラジオボタン
ナビゲーションに移動
検索に移動
概要[編集]
ポップアップメニューを使ったラジオボタン(のようなもの)です。
機能[編集]
- 選択項目は、{ items :["項目1","項目2","項目3"], selected : 数値(初期インデックス) }という連想配列の配列で与えてください。配列の要素が一つの選択グループです。
- 返り値も、連想配列の配列です。
- キャンセルしたときの返り値は、与えた連想配列です。
- 予め連想配列を変数にしておいた方が使いやすいと思います。
履歴[編集]
- 2014/01/26 初版
コード[編集]
// radiobtn.js
// 2014/01/26
var orientation = { items:["landscape","portrait"] , selected:1 };
var paper = { items:["A4","B5","letter"] , selected:0 };
var printer = { items:["pdf","EPSON","CANON","OKI","other"] , selected:0 };
// 使用方法その1
var ret = radiobtn( [ printer, paper, orientation ] );
for ( var i = 0; i < ret.length; i++ ){
Alert( ret[ i ].items[ ret[ i ].selected ] );
}
// 使用方法その2
radiobtn( [ printer, paper, orientation ] );
Alert( printer.items[ printer.selected ] );
Alert( paper.items[ paper.selected ] );
Alert( orientation.items[ orientation.selected ] );
function radiobtn( arg1 ){
var menuitems = arg1;
var off = 5, selcan = 0, selok = 1;
// 初期値の保存
for ( var i = 0; i < menuitems.length; i++ ){
menuitems[ i ].initial = menuitems[ i ].selected;
}
var r = 0;
while( r >= 0 ){
r = showPopupMenu();
switch ( r ){
case selcan - off:
for ( var i = 0; i < menuitems.length; i++ ){
menuitems[ i ].selected = menuitems[ i ].initial;
}
return menuitems;
case selok - off:
return menuitems;
default :
var i = 0;
while( r > menuitems[ i ].items.length - 1 ){
r = r - menuitems[ i ].items.length;
i++;
}
menuitems[ i ].selected = r;
}
}
function showPopupMenu(){
var menu = CreatePopupMenu();
var idx = 0;
for ( var i = 0; i < menuitems.length; i++ ){
var submenu = CreatePopupMenu();
menu.AddPopup( menuitems[ i ].items[ menuitems[ i ].selected ], submenu );
for ( var k = 0; k < menuitems[ i ].items.length; k++ ){
submenu.Add( menuitems[ i ].items[ k ] , idx + off, 0 );
idx++;
}
}
menu.Add( "---", 0, meMenuSeparator );
menu.Add( "キャンセル", selcan, 0 );
menu.Add( "選択終了", selok, 0 );
return menu.track( 0 ) - off;
}
}
その他[編集]
- おかしなところがあったら教えてください。
スポンサーリンク