如何根据选择值将变量传递给函数?

问题描述:

为了这个问题,这是我遇到的问题的简化版本。如何根据选择值将变量传递给函数?

如果我在我的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'} 
] 

如果我想要再通过遍历数组和谷歌地图标记与每个对象创建变量,我怎么

$.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'好像是它们形成一个对象,并且你需要这些对象的数组。然后你只需要该数组中的第三个元素。 – David

+1

像这样的东西可能是去https://jsfiddle.net/otmegmnu/ –

考虑一个更合理的数据结构,而不是所有的个体变量。启动与对象:

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

毕竟,如果cde应当以某种方式来解释一起,代表东西是连接,那么这听起来像你想描述一个对象。

这时正好有一个对象的数组:

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

Hi @David和其他人, 如果您不介意,还有其他问题: –

+0

我已经添加了第二个问题,涉及您的答案。如果你有时间,请看看。请参阅主要问题主体中的问题#2更新。非常感谢。 –

有许多改进你的代码,但如果你想使用目前的结构,那么你可以做这样的事情。

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); 
}