「ポップアップメニューでチェックボックス」の版間の差分
ナビゲーションに移動
検索に移動
ページの作成:「= 概要 = ポップアップメニューでチェックボックスのような動作を実現します。 = 利用方法 = * 選択項目は配列で与えてくだ...」 |
編集の要約なし |
||
| 1行目: | 1行目: | ||
= 概要 = | = 概要 = | ||
ポップアップメニューを使ったチェックボックス(のようなもの)です。 | |||
= | = 機能 = | ||
* | * 選択項目は、{ "項目名" : boolean }という形の連想配列で与えてください。<br />trueで与えると最初からチェックされます。 | ||
* | * 返り値も、連想配列です。 | ||
* | * キャンセルしたときの返り値は、空の連想配列です。 | ||
* | |||
= 履歴 = | |||
* 20140125 初版 | |||
* 20140126 初期値を与えられるように変更 | |||
= コード = | = コード = | ||
| 18行目: | 21行目: | ||
CheckBox.prototype = { | CheckBox.prototype = { | ||
menuitem : " | menuitem : "アイテム(連想配列)", // { key : boolean, …… } | ||
index : "メニューに表示された順序", | |||
initialize : function( arg1 ){ | initialize : function( arg1 ){ | ||
this.menuitem = arg1; | this.menuitem = arg1; | ||
this. | this.index = []; | ||
}, | }, | ||
show : function(){ | show : function(){ | ||
| 33行目: | 33行目: | ||
r = showPopupMenu( this ); | r = showPopupMenu( this ); | ||
if ( r == 0 - off ){ | if ( r == 0 - off ){ | ||
return {}; | |||
return | |||
} else if ( r == 1 - off ){ | } else if ( r == 1 - off ){ | ||
return this. | return this.menuitem; | ||
} else { | } else { | ||
this. | this.menuitem[ this.index[r] ] = !this.menuitem[ this.index[r] ]; | ||
}; | }; | ||
} | } | ||
| 44行目: | 43行目: | ||
function showPopupMenu( obj ){ | function showPopupMenu( obj ){ | ||
var menu = CreatePopupMenu(); | var menu = CreatePopupMenu(); | ||
var i = 0; | |||
menu.Add( | for ( var key in obj.menuitem ){ | ||
menu.Add( key , i + off, ( obj.menuitem[ key ] )? meMenuChecked : 0 ); | |||
obj.index.push( key ); | |||
i++; | |||
} | } | ||
menu.Add( "---", 0, meMenuSeparator ); | menu.Add( "---", 0, meMenuSeparator ); | ||
| 55行目: | 57行目: | ||
} | } | ||
var chkbox1 = new CheckBox( { "a":true, "b":false, "c":false, "d":false } ); | |||
var r = chkbox1.show(); | |||
for ( var i in r ){ | |||
Alert( i + " -> " + r[ i ] ); | |||
}; | |||
</source> | |||
= その他 = | = その他 = | ||
おかしい箇所やもっといい方法があったら教えてください。 | おかしい箇所やもっといい方法があったら教えてください。<br /> | ||
2014年1月26日 (日) 09:45時点における版
概要
ポップアップメニューを使ったチェックボックス(のようなもの)です。
機能
- 選択項目は、{ "項目名" : boolean }という形の連想配列で与えてください。
trueで与えると最初からチェックされます。 - 返り値も、連想配列です。
- キャンセルしたときの返り値は、空の連想配列です。
履歴
- 20140125 初版
- 20140126 初期値を与えられるように変更
コード
// chkbox.js
// 2014/01/25/
CheckBox = function(){
this.initialize.apply( this, arguments );
}
CheckBox.prototype = {
menuitem : "アイテム(連想配列)", // { key : boolean, …… }
index : "メニューに表示された順序",
initialize : function( arg1 ){
this.menuitem = arg1;
this.index = [];
},
show : function(){
var off = 5;
var r = 0;
while( r >= 0 ){
r = showPopupMenu( this );
if ( r == 0 - off ){
return {};
} else if ( r == 1 - off ){
return this.menuitem;
} else {
this.menuitem[ this.index[r] ] = !this.menuitem[ this.index[r] ];
};
}
function showPopupMenu( obj ){
var menu = CreatePopupMenu();
var i = 0;
for ( var key in obj.menuitem ){
menu.Add( key , i + off, ( obj.menuitem[ key ] )? meMenuChecked : 0 );
obj.index.push( key );
i++;
}
menu.Add( "---", 0, meMenuSeparator );
menu.Add( "キャンセル", 0, 0 );
menu.Add( "選択終了", 1, 0 );
return menu.track( 0 ) - off;
}
}
}
var chkbox1 = new CheckBox( { "a":true, "b":false, "c":false, "d":false } );
var r = chkbox1.show();
for ( var i in r ){
Alert( i + " -> " + r[ i ] );
};
その他
おかしい箇所やもっといい方法があったら教えてください。
スポンサーリンク