2016-03-31 6 views
1

アイデアは、各選択フィールドが変更されたとき、フォームアクション(各オプションの値)に必要なディレクトリの一部を渡します。すなわち:このjavascriptを短縮できますか? Jqueryはオプションです

<select onChange="chgFrmAtn" id="1-1"> 
<option value="">Any</option> 
<option value="exDir1Option1">option 1</option> 
<option value="exDir1Option2">option 2</option> 
</select> 

ここではjavascriptは、基本的に私は2つのディレクトリ、いくつかの異なるオプションをビルドしたい。オプションの数は、このサンプルスクリプトのリストよりもはるかに長くなります。オプションは任意の順序で指定できます。いずれかが選択されている場合は、ディレクトリに追加されません。

function chgFrmAtn(itemVal) 
{ 
    var directory1Part1 = ''; 
    var directory1Part2 = ''; 
    var directory1Part3 = ''; 

    var directory2Part1 = ''; 
    var directory2Part2 = ''; 

    if(itemVal == '1-1'){ 
     directory1Part1 = document.getElementById(itemVal); 
    } 
    if(itemVal == '1-2'){ 
     directory1Part2 = document.getElementById(itemVal); 
    } 
    if(itemVal == '1-3'){ 
     directory1Part3 = document.getElementById(itemVal); 
    } 
    if(itemVal == '2-1'){ 
     directory1Part1 = document.getElementById(itemVal); 
    } 
    if(itemVal == '2-2'){ 
     directory1Part2 = document.getElementById(itemVal); 
    } 
    document.advancedSearchForm.action = directory1Part1 + directory1Part2 + directory1Part3 + '/' + directory2Part1 + directory2Part2 + '/'; 
} 

ありがとうございます。

+1

ループを使用してください。複数の変数の代わりに配列やオブジェクトを使用する。いいえ、jQueryはあまり役に立ちません。 – Bergi

答えて

2

はitemValは同じまま、唯一の文が本当かどうなりますので、基本的にあなただけのdirectoryxPartyで一つの値を取得します

function chgFrmAtn(itemVal) 
{ 
     document.advancedSearchForm.action = document.getElementById(itemVal).value; 
} 

を試してみてください。

編集:

それは次に、各選択からの値を追加しなければならない場合

するvar selectIds = "1-1"、 "1-2"、 "1-3"、 " 2-1 "、" 2-2 "];

function chgFrmAtn() 
{ 
    var vals = selectIds.map(function(id){ 
     var obj = document.getElementById(id); 
     return obj && obj.value ? obj.value : ""; 
    }); 
    document.advancedSearchForm.action = vals[0] + vals[1] + vals[2] + '/' + vals[3] + vals[4] + '/'; 
} 
+0

しかし、選択したすべてのフィールドからアクションを構築する必要があります。これは各価値を補うために働くのだろうか?オプションが "any"に戻された場合は削除しますか? – John

+0

@Johnは更新された投稿を試します – gurvinder372

2

2つの配列を使用して比較を行うことができます。

function chgFrmAtn(itemVal) { 
    var vals = ['1-1', '1-2', '1-3', '2-1', '2-2'], 
     directory = vals.map(function (a) { 
      return itemVal === a ? document.getElementById(a) : ''; 
     }); 

    document.advancedSearchForm.action = directory[0] + directory[1] + directory[2] + '/' + directory[3] + directory[4] + '/'; 
} 
+1

ニース、これははるかにクリーンなソリューションです。私はそれを試してみましょう。ありがとう! – John

+0

しかし、あなたが提供されたサンプルよりもレベルが上がっていれば、それは失敗します。 – Nico

+0

@nico、より多くのレベル - >新しいデザイン。 –

関連する問題