「ポップアップメニューでチェックボックス」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
手石 (トーク | 投稿記録)
編集の要約なし
手石 (トーク | 投稿記録)
編集の要約なし
9行目: 9行目:
= 履歴 =
= 履歴 =
* 20140125 初版
* 20140125 初版
* 20140126 初期値を与えられるように変更
* 20140126 関数に変更。また、初期値を与えられるようにした。


= コード =
= コード =
<source lang="javascript">
<source lang="javascript">
// chkbox.js
// chkbox.js
// 2014/01/25/
// 2014/01/26/


CheckBox = function(){
var r = CheckBox( { "a":true, "b":false, "c":false, "d":false } );
   this.initialize.apply( this, arguments );
for ( var i in r ){
}
   Alert( i + " -> " + r[ i ] );
};
 
function CheckBox( arg1 ){
  var menuitem = arg1;
  var index = [];
  var off = 5;
  var r = 0;


CheckBox.prototype = {
   while( r >= 0 ){
  menuitem : "アイテム(連想配列)", // { key : boolean, …… }
    r = showPopupMenu();
  index : "メニューに表示された順序",
    if ( r == 0 - off ){
  initialize : function( arg1 ){
      return {};
    this.menuitem = arg1;
    } else if ( r == 1 - off ){
    this.index = [];
      return menuitem;
  },
    } else {
   show : function(){
      menuitem[ index[r] ] = !menuitem[ index[r] ];
    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 ){
  function showPopupMenu(){
      var menu = CreatePopupMenu();
    var menu = CreatePopupMenu();
      var i = 0;
    var i = 0;
      for ( var key in obj.menuitem ){
    for ( var key in menuitem ){
        menu.Add( key , i + off, ( obj.menuitem[ key ] )? meMenuChecked : 0 );
      menu.Add( key , i + off, ( menuitem[ key ] )? meMenuChecked : 0 );
        obj.index.push( key );
      index.push( key );
        i++;
      i++;
      }
      menu.Add( "---", 0, meMenuSeparator );
      menu.Add( "キャンセル", 0, 0 );
      menu.Add( "選択終了", 1, 0 );
      return menu.track( 0 ) - off;
     }
     }
    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 ] );
};
</source>
</source>


= その他 =
= その他 =
おかしい箇所やもっといい方法があったら教えてください。<br />
おかしい箇所やもっといい方法があったら教えてください。<br />

2014年1月26日 (日) 10:08時点における版

概要

ポップアップメニューを使ったチェックボックス(のようなもの)です。

機能

  • 選択項目は、{ "項目名" : boolean }という形の連想配列で与えてください。
    trueで与えると最初からチェックされます。
  • 返り値も、連想配列です。
  • キャンセルしたときの返り値は、空の連想配列です。

履歴

  • 20140125 初版
  • 20140126 関数に変更。また、初期値を与えられるようにした。

コード

// chkbox.js
// 2014/01/26/

var r = CheckBox( { "a":true, "b":false, "c":false, "d":false } );
for ( var i in r ){
  Alert( i + " -> " + r[ i ] );
};

function CheckBox( arg1 ){
  var menuitem = arg1;
  var index = [];
  var off = 5;
  var r = 0;

  while( r >= 0 ){
    r = showPopupMenu();
    if ( r == 0 - off ){
      return {};
    } else if ( r == 1 - off ){
      return menuitem;
    } else {
      menuitem[ index[r] ] = !menuitem[ index[r] ];
    };
  }

  function showPopupMenu(){
    var menu = CreatePopupMenu();
    var i = 0;
    for ( var key in menuitem ){
      menu.Add( key , i + off, ( menuitem[ key ] )? meMenuChecked : 0 );
      index.push( key );
      i++;
    }
    menu.Add( "---", 0, meMenuSeparator );
    menu.Add( "キャンセル", 0, 0 );
    menu.Add( "選択終了", 1, 0 );
    return menu.track( 0 ) - off;
  }

}

その他

おかしい箇所やもっといい方法があったら教えてください。

スポンサーリンク