2016-06-28 31 views
-1

この質問のために、これは私が持っている問題の簡略版です。選択値に基づいて関数に変数を渡すにはどうすればよいですか?

私はHTMLで<select>をお持ちの場合:

<select> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
    <option value="4">4</option> 
    <option value="5">5</option> 
    <option value="6">6</option> 
</select> 

その後、私のJS:上記のコードで

var a,b = 12; 
var c1,d1,e1, 
    c2,d2,e2, 
    c3,d3,e3, 
    c4,d4,e4, 
    c5,d5,e5, 
    c6,d6,e6 = // Assigned individually from loop. NOT actual code. 


function myFunction(a,b,c,d,e){ 
    // do something with a,b,c,d,e 
} 

$('select').on('change', function() { 
    var id = $(this).val(); 
    c = c+id; 
    d = d+id; 
    e = e+id; 
    myFunction(a, b, c, d, e); 
} 

私はオプション3を選択した場合、私は、関数、変数のC3を渡したいです、d3、e3。

渡される変数にidから '3'を割り当てるにはどうすればよいですか?このコードの選択部分で何が問題になっていますか?

助けてください。ありがとう。


質問#2:私はあなたが提案した方法でオブジェクトの配列を構築する場合はデビッドの答え

@に続いて。

destinations = [ 
    {id:'123', title:'London', lat:'1.52121' , lng:'-1.3423423', content:'a string'}, 
    {id:'456', title:'Paris',  lat:'1.52121' , lng:'-1.3423423', content:'a string'}, 
    {id:'634', title:'Amsterdam', lat:'1.52121' , lng:'-1.3423423', content:'a string'} 
] 

私はその配列を反復処理し、各オブジェクトにGoogleマップのマーカーのための変数を作成したい場合、どのように私

$.each(destinations, function(i, ob) { 
    $.each(ob, function (key, value) { 
    var marker[ob.id] = new google.maps.Marker({ 
     draggable: false, 
     map: map, 
     icon: dotMarker, 
     position: {lat: ob.lat, lng: ob.lng} 
    }); 
}); 
+0

まず、私がいないすべてのそれらの個々の変数、すべてのそれらの値を保持するために、配列やオブジェクトを使用することになり – DelightedD0D

+3

、より賢明なデータ構造は、ここを呼びかけているようです。 'c'、' d'、 'e'はオブジェクトを形成するように見えますが、それらのオブジェクトの配列が必要です。次に、その配列から3番目の要素が必要になります。 – David

+1

これは、https://jsfiddle.net/otmegmnu/ –

答えて

3

ではなく、すべてのそれらの個々の変数のより賢明なデータ構造を考えてみます。 cd、およびeが何らかの方法で一緒に解釈されるべきである場合、すべての後

{ 
    c: '', 
    d: '', 
    e: '' 
} 

とあなたが記述しようとしているオブジェクトのように聞こえるその後、接続したものを表す:オブジェクトを起動します。

は、それからちょうどそのオブジェクトの配列を持っている:

var myObjects = [ 
    { c: '', d: '', e: '' }, 
    { c: '', d: '', e: '' }, 
    { c: '', d: '', e: '' }, 
    // etc. 
] 

これはあなたのコメントを示唆するものに多くを準拠します:

//次にループ

から動的に割り当てられた値あなたのオプションの値には、単にのインデックスがあります:

<select> 
    <option value="0">1</option> 
    <option value="1">2</option> 
    <option value="2">3</option> 
    <option value="3">4</option> 
    <option value="4">5</option> 
    <option value="5">6</option> 
</select> 

そして、あなたがそのインデックスに基づいて要素を取得することができます:

var id = $(this).val(); 
var myObject = myObjects[id]; 
myFunction(a, b, myObject.c, myObject.d, myObject.e); 

ここに物事を改善するために行われますが、例の不自然性質は、それが意味的に曖昧になることができますおそらくより多くがあります。ここでのポイントは、構造の欠如を説明する複雑なロジックを持たずに、使用している構造にロジックを配置することです。

"スマートなデータ構造とダムコードは、他の方法よりも優れています。"
- エリック・レイモンド、「伽藍とバザール」

+0

ありがとうございました。私はあなたが言っていることを得る。非常に良い。 :D –

+0

こんにちは@Davidと他の人、 あなたが気にしない場合、さらに質問: –

+0

私はあなたの答えに関係する2番目の質問を追加しました。あなたには瞬間があるかどうか見てください。質問本体の質問2を参照してください。どうもありがとう。 –

0

があなたのコードには多くの改善点がありますが、あなたは現在の構造を使用する場合、あなたはこのような何かを行うことができます。

var a,b = 12; //note: all variables are defined in global (window) scope 
var c1,d1,e1, 
    c2,d2,e2, 
    c3,d3,e3, 
    c4,d4,e4, 
    c5,d5,e5, 
    c6,d6,e6 = // Assigned individually from loop. NOT actual code. 

$('select').on('change', function() { 
    var id = $(this).val(); //let it be 3 
    var c = window['c' + id]; //c3 
    var d = window['d' + id]; //d3 
    var e = window['e' + id]; //e3 
    myFunction(a, b, c, d, e); 
} 
関連する問題