「ポップアップメニューでラジオボタン」の版間の差分
ナビゲーションに移動
検索に移動
日付のフォーマットを変更 |
SyntaxHighlightにcopyの追加 |
||
| (同じ利用者による、間の2版が非表示) | |||
| 9行目: | 9行目: | ||
== 変更履歴 == | == 変更履歴 == | ||
* 2014-01-26 初版 | * 1.0.0 (2014-01-26) | ||
** 初版 | |||
== ソースコード == | == ソースコード == | ||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript" copy> | ||
// radiobtn.js | // radiobtn.js | ||
// 2014-01-26 | // 2014-01-26 | ||
2025年6月30日 (月) 00:53時点における最新版
概要[編集]
ポップアップメニューを使ったラジオボタン(のようなもの)です。
機能[編集]
- 選択項目は、{ items :["項目1","項目2","項目3"], selected : 数値(初期インデックス) }という連想配列の配列で与えてください。配列の要素が一つの選択グループです。
- 返り値も、連想配列の配列です。
- キャンセルしたときの返り値は、与えた連想配列です。
- 予め連想配列を変数にしておいた方が使いやすいと思います。
変更履歴[編集]
- 1.0.0 (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;
}
}
その他[編集]
- おかしなところがあったら教えてください。
スポンサーリンク