「ポップアップメニューでラジオボタン」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
MSY-07 (トーク | 投稿記録)
変更履歴: バージョン表記の追加
MSY-07 (トーク | 投稿記録)
SyntaxHighlightにcopyの追加
 
13行目: 13行目:


== ソースコード ==
== ソースコード ==
<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;
  }
}

その他[編集]

  • おかしなところがあったら教えてください。
スポンサーリンク