• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javascriptで同じような処理を繰り返しているところをスマートに)

javascriptで処理をスマートにする方法

このQ&Aのポイント
  • javascriptを使用して同じ処理をスマートにしたいと考えています。具体的には、複数の選択肢を持つセレクトボックスの値を変更する際に、サイトに応じて異なる値を設定したいと思っています。現在のスクリプトは、選択されたサイトによって、セレクトボックスの値が変更されるようになっていますが、もっとスマートな方法があれば教えていただきたいです。
  • 現在のスクリプトでは、各サイトごとに異なる値の配列を作成し、サイトごとに条件分岐して値を設定しています。しかし、この方法では、サイトごとの条件分岐が増えた場合に対応するのが煩雑です。もっと効率的でスマートな方法があれば教えてください。
  • また、スクリプトの一部では、異なるセレクトボックスに異なる値を設定しています。現在は、各セレクトボックスごとに値を設定するため、繰り返しの処理が多くなっています。もっと簡潔で効率的な方法があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答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); } もっとみじかくする?

hunter_999
質問者

補足

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

その他の回答 (1)

  • 15mm
  • ベストアンサー率65% (65/100)
回答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