- ベストアンサー
javascriptで処理をスマートにする方法
- javascriptを使用して同じ処理をスマートにしたいと考えています。具体的には、複数の選択肢を持つセレクトボックスの値を変更する際に、サイトに応じて異なる値を設定したいと思っています。現在のスクリプトは、選択されたサイトによって、セレクトボックスの値が変更されるようになっていますが、もっとスマートな方法があれば教えていただきたいです。
- 現在のスクリプトでは、各サイトごとに異なる値の配列を作成し、サイトごとに条件分岐して値を設定しています。しかし、この方法では、サイトごとの条件分岐が増えた場合に対応するのが煩雑です。もっと効率的でスマートな方法があれば教えてください。
- また、スクリプトの一部では、異なるセレクトボックスに異なる値を設定しています。現在は、各セレクトボックスごとに値を設定するため、繰り返しの処理が多くなっています。もっと簡潔で効率的な方法があれば教えてください。
- みんなの回答 (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); } もっとみじかくする?
その他の回答 (1)
- 15mm
- ベストアンサー率65% (65/100)
見た感じ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("_")); とか?ぃゃ、誰かにパス。
補足
早速ご回答ありがとうございます。 出来るだけスマートにしたいと考えております。 短く出来れば幸いです。