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);
}
No.1ベストアンサー
- 回答日時:
さっぱりうごくかどうかわかりませんが、
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);
}
もっとみじかくする?
No.2
- 回答日時:
見た感じ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("_"));
とか?ぃゃ、誰かにパス。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- Visual Basic(VBA) 指定の条件に応じたセルの場所に〇印(図形)を描く 2 2022/11/08 15:26
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) VBAで実行時エラー'424' オブジェクトが必要ですと出る 2 2022/10/07 09:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プルダウン 項目が多いので先頭...
-
セレクトの値を取得できない
-
html selectの内容を初期値に戻す
-
jspに組込んだJavaScript でjava文
-
CSVファイルを読みこみ、プルダ...
-
セレクトを全て選択されていな...
-
Selectの中身をfor文で入れる
-
プルダウンとテキストの連動
-
javascriptでの2つのプルダウン...
-
jQuery セレクトボックスで選択...
-
現在時刻を取得してフォームのs...
-
onFocusOutが複数回呼ばれる!
-
int select(int n, fd_set *rea...
-
<textarea>にプルダウンを表示...
-
リストボックスの項目の順番を...
-
selectメニューのselectedの位...
-
<input>の選択肢をプルダウンメ...
-
TextBoxに半角数字以外を入れた...
-
【jQuery】input nameの文字列...
-
value内に変数を入れたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウン 項目が多いので先頭...
-
Selectボックスの幅を自動で広...
-
jQuery セレクトボックスで選択...
-
Selectの中身をfor文で入れる
-
html selectの内容を初期値に戻す
-
CSVファイルを読みこみ、プルダ...
-
JQuery selectが反映されない
-
セレクトの値を取得できない
-
セレクトを全て選択されていな...
-
セレクトメニューで選択された...
-
ブラウザの戻るボタンを押した...
-
javascriptでselectボックスの<...
-
リストボックスの項目の順番を...
-
現在時刻を取得してフォームのs...
-
onFocusOutが複数回呼ばれる!
-
セレクトボックスで現在選択さ...
-
【javascript・PHP】プルダウン...
-
document.form で nullまたは...
-
プルダウンで現在の年月日を取...
-
onchange等のイベントハンドラ...
おすすめ情報