プロが教えるわが家の防犯対策術!

javascriptで同じような処理を繰り返しているところをスマートにしたい
と考えております。
具体的には、下記のスクリプトをスマートにしたいのですが、
どなたかお知恵を拝借ください。
宜しくお願いいたします。
function select_opt(site){
//消費税
select = document.getElementById('money_tax');
var opt_set=new Array();
switch(site){
case 'aaa':
opt_set.push('2,税込','3,税無');
break;
case 'bbb':
opt_set.push('1,税込','2,税無');
break;
default:
opt_set.push('2,税込','3,税無');
}
select_change(select,opt_set);
//計測方式
select = document.getElementById('house_area_kind');
var opt_set=new Array();
switch(site){
case 'aaa':
opt_set.push('2,登記','1,実測');
break;
case 'bbb':
opt_set.push('1,登記','2,実測');
break;
default:
opt_set.push('2,登記','1,実測');
}
select_change(select,opt_set);
//構造
select = document.getElementById('house_kouzou');
var opt_set=new Array(',----------','1,木造','2,ブロック造','3,鉄骨造','4,RC(鉄筋コンクリート)','5,SRC(鉄骨鉄筋コンクリート)','6,PC(プレキャストコンクリート)','7,HPC(鉄骨プレキャストコンクリート)','9,その他');
switch(site){
case 'aaa':
opt_set.push('10,軽量鉄骨造','11,ALC造','12,鉄筋ブロック造','13,CFT(コンクリート充填鋼管)');
break;
case 'bbb':
opt_set.push('8,軽量鉄骨造','13,ALC造');
break;
default:
opt_set.push('10,軽量鉄骨造','11,ALC造','12,鉄筋ブロック造','13,CFT(コンクリート充填鋼管)');
}
select_change(select,opt_set);
//入居/引渡時期
select = document.getElementById('usable_status');
var opt_set=new Array(',----------','1,即時','2,相談','3,期日指定');
switch(site){
case 'aaa':
opt_set;
break;
case 'bbb':
opt_set.push('4,契約後');
break;
default:
opt_set;
}
select_change(select,opt_set);
}

A 回答 (2件)

さっぱりうごくかどうかわかりませんが、


function select_opt( site ) {
 var n = {aaa:1,bbb:2}[site]||0;
 var tmp;

 select_change( document.getElementById( 'money_tax' ),
  [['2,税込','3,税無'],['2,税込','3,税無'],['1,税込','2,税無']][n]);

 select_change( document.getElementById( 'house_area_kind' ),
  [['2,登記','1,実測'],['2,登記','1,実測'],['1,登記','2,実測']][n]);

 tmp = ['----------','1,木造','2,ブロック造','3,鉄骨造','4,RC(鉄筋コンクリート)','5,SRC(鉄骨鉄筋コンクリート)','6,PC(プレキャストコンクリート)','7,HPC(鉄骨プレキャストコンクリート)','9,その他'];
 tmp.push( [['10,軽量鉄骨造','11,ALC造','12,鉄筋ブロック造','13,CFT(コンクリート充填鋼管)'],
       ['10,軽量鉄骨造','11,ALC造','12,鉄筋ブロック造','13,CFT(コンクリート充填鋼管)'],
       ['8,軽量鉄骨造','13,ALC造']][n]);
 select_change( document.getElementById( 'house_kouzou' ), tmp );

 tmp = ['----------', '1,即時', '2,相談', '3,期日指定'];
 tmp.push( [['10,軽量鉄骨造','11,ALC造','12,鉄筋ブロック造','13,CFT(コンクリート充填鋼管)'],
       ['10,軽量鉄骨造','11,ALC造','12,鉄筋ブロック造','13,CFT(コンクリート充填鋼管)'],
       ['8,軽量鉄骨造','13,ALC造']][n] );
 select_change( document.getElementById( 'usable_status' ), tmp);
}

もっとみじかくする?

この回答への補足

早速ご回答ありがとうございます。
出来るだけスマートにしたいと考えております。
短く出来れば幸いです。

補足日時:2010/05/01 13:04
    • good
    • 0

見た感じcase aaaとdefaultは同じ動作ですが、それでいいですかね?



・site=="bbb"のときだけ処理が特殊
・配列データは変更しやすいように弄らずそのまま
という方針で、babu_babooさんのを骨に、以下。
({aaa:1,bbb:2}[site]||0 の考え方を初めて見た。感動。しかし生かせず・・・)
--------------
function select_opt( site ) {
 var tmp,d=document.getElementById,n=site!="bbb"//以下 n? aaaとdefaultのとき : bbbのとき

 select_change( d('money_tax'),
  n?['2,税込','3,税無']:['1,税込','2,税無']);

 select_change( d('house_area_kind'),
  n?['2,登記','1,実測']:['1,登記','2,実測']);

 tmp = ['----------','1,木造','2,ブロック造','3,鉄骨造','4,RC(鉄筋コンクリート)','5,SRC(鉄骨鉄筋コンクリート)','6,PC(プレキャストコンクリート)','7,HPC(鉄骨プレキャストコンクリート)','9,その他'];
 n?tmp.push('10,軽量鉄骨造','11,ALC造','12,鉄筋ブロック造','13,CFT(コンクリート充填鋼管)')
  :tmp.push('8,軽量鉄骨造','13,ALC造')
 select_change( d('house_kouzou'), tmp);

 tmp = ['----------', '1,即時', '2,相談', '3,期日指定'];
 n||tmp[4]=('4,契約後');
 select_change( d('usable_status'), tmp);
}
--------------
String.split()を使ったり、tmp=[tmp[0],'1,即時', ... ]と使いまわしたり、
配列のところもやろうと思えばいろいろできますが放置。

独り言:pushのところが美しくないな・・・
 tmp='----------_1,木造_2,(中略)_9,その他_'+(n?'10,軽量鉄骨造_11,(略)_13,CFT':'8,軽量鉄骨造_13,ALC造');
 select_change( $('usable_status'), tmp.split("_"));
とか?ぃゃ、誰かにパス。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!